这个写的公共类叫做:GPScombineClass类主要展示GPS位置的定位,GPS坐标的获取,然后从手机坐标转换成火星坐标,继而在需要的情况下,由火星转百度 ,百度转火星的详细算法;

 

在GPScombineClass.h中

#import <Foundation/Foundation.h>

#import <CoreLocation/CoreLocation.h>

#import "CSqlite.h"

#import <MapKit/MapKit.h>

@interface GPScombineClass : NSObject<MKMapViewDelegate>{

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 <MKAnnotation> {

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

ISO GPS定位,坐标转换以及如何显示的更多相关文章

  1. GPS(2)关于位置的3个示例,实时获取GPS定位数据,求两个经纬点距离,邻近某个区域圆时警告

    实时获取GPS定位数据 import android.app.Activity; import android.content.Context; import android.location.Loc ...

  2. GPS定位学习笔记

    ********************************* GPS定位简介 ********************************** 1. iOS SDK提供两个框架来实现位置服务 ...

  3. 与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器

    原文:与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器 [索引页][源码下载] 与众不同 windows phon ...

  4. Android GPS定位测试(附效果图)

    今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...

  5. Android GPS定位测试(附效果图)

    今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...

  6. 手机版的百度map封装,使用gps定位

    代码如下,包自己引 包参考 一个百度MAP导航的基础封装 使用的是浏览器调用gps定位 修改了标注的大小 效果如图: 代码...... <!DOCTYPE html> <html&g ...

  7. Android---58---初学GPS定位

    GPS英文是Global Positioning System 全球定位系统的简称. Android为GPS功能支持专门提供了一个LocationManager,位置管理器.全部GPS定位相关的服务. ...

  8. GPS定位 测试

    public class MainActivity extends Activity { private final String TAG = "BX"; private Loca ...

  9. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

随机推荐

  1. Linux主流架构运维工作简单剖析

    转载:http://wgkgood.blog.51cto.com/1192594/1586259 随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如 ...

  2. 【DB2】数据迁移

    数据迁移概述 在日常生活中常有数据的导入导出,为此db2提出了很多工具可以选择,export.import.load.db2look.db2move.db2dart,如下图所示: a.最上面虚线框部分 ...

  3. Android开发之使用Handler刷新UI控件

    一.为什么必须使用Handler 线程安全问题 这个问题要理解的话很容易,如果没有这个约束,那么同时有两个线程对一个UI控件进行调整,那么控件自然就没法正常的工作,而为了解决这种二义性(就是一个东西同 ...

  4. mysql workbench图形化mysql管理工具

    MYSQL官网也推出了针对Linux的图形化的连接工具-MySQL Workbench.MySQL Workbench不仅仅是一个简单的MySQL客户端.简而言之,Workbench是一个跨平台的 ( ...

  5. Spring Cloud开发实践 - 04 - Docker部署

    Docker的安装和命令可以参考 https://www.cnblogs.com/milton/p/9866963.html . 资源规划 这一步要区分传统资源和Docker资源, 为后面的细节定好基 ...

  6. 转:OGRE场景管理器介绍

    一个场景代表在虚拟世界中显示的物品.场景可以包括静态几何体(比如地形或者室内),模型(比如树.椅子等),光和摄像机.场景有下面种类.室内场景:可能由走廊.有家具的屋子和挂着装饰品的墙组成.室外场景:可 ...

  7. 修改谷歌云google cloud engine VM root账户的密码和允许远程ssh登录

      Figured it out. The VM's in cloud engine don't come with a root password setup by default so you'l ...

  8. #探究# HTTP长连接和短连接

    本文速读: HTTP协议与TCP/IP协议的关系 因TCP协议可靠,所以HTTP通常基于TCP实现 如何理解HTTP协议是无状态的 多次请求之间没有关联关系 什么是长连接.短连接? 每次请求都建立TC ...

  9. 对IT技术开发职业生涯的思考

    对职业生涯的思考 从刚毕业到目前所在公司,差不多6年了,想想这六年里面,自己的能力和刚毕业比有了很大的提升,但是现在在什么能力上,我不知道,毕竟没有去过别的公司.最近也在思考自己未来,算是比较迷茫阶段 ...

  10. 【java】详解I/O流

    目录结构: contents structure [+] File类 I/O流体系 流的基本介绍 访问文件 转化流 DataInputStream和DataOutputStream 对象流 推回输入流 ...