ISO GPS定位,坐标转换以及如何显示
这个写的公共类叫做: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定位,坐标转换以及如何显示的更多相关文章
- GPS(2)关于位置的3个示例,实时获取GPS定位数据,求两个经纬点距离,邻近某个区域圆时警告
实时获取GPS定位数据 import android.app.Activity; import android.content.Context; import android.location.Loc ...
- GPS定位学习笔记
********************************* GPS定位简介 ********************************** 1. iOS SDK提供两个框架来实现位置服务 ...
- 与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器
原文:与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器 [索引页][源码下载] 与众不同 windows phon ...
- Android GPS定位测试(附效果图)
今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...
- Android GPS定位测试(附效果图)
今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...
- 手机版的百度map封装,使用gps定位
代码如下,包自己引 包参考 一个百度MAP导航的基础封装 使用的是浏览器调用gps定位 修改了标注的大小 效果如图: 代码...... <!DOCTYPE html> <html&g ...
- Android---58---初学GPS定位
GPS英文是Global Positioning System 全球定位系统的简称. Android为GPS功能支持专门提供了一个LocationManager,位置管理器.全部GPS定位相关的服务. ...
- GPS定位 测试
public class MainActivity extends Activity { private final String TAG = "BX"; private Loca ...
- Android中GPS定位的简单应用
在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...
随机推荐
- cocos2d-js 3.0 RC0 监听返回键、菜单键、进入后台(home键)、恢复显示等事件
cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, eve ...
- Oracle11g口令过期的解决
今天发现服务器上的Oracle11g突然登录不上去了,提示ORA-28002错误,说是口令过期. 1. 用DBA账户登录SQL PLUS.我用的是SYS. 2. 系统会提示口令失效,但是会马上让你重置 ...
- 每天五个java相关面试题(7)--线程篇
首先关于线程能够先看我之前这篇博文熟悉一下线程生命周期的图示以及文字说明 好開始了: 1.java 中有几种方法能够实现一个线程? 答:有两种实现方法.各自是继承 Thread类与实现Runnable ...
- APache PDFbox API使用(1)----简单介绍
因为项目的须要.近期在学习APache PDFbox API,Apache PDFbox API是Apache Java 开源社区中个一个项目,其受Apache 版权 V2的保护,其提供了以下的功能 ...
- ROS中发布IMU传感器消息
下面使用SYD Dynamics的9轴AHRS(Attitude and heading reference system),来发布sensor_msgs/Imu类型的消息. 将传感器用USB转串口接 ...
- OpenCV学习代码记录——Hough线段检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- Intent传递数据全解
概述 之前的博文也有介绍,查看-->用户界面开发基础 这里单独抽取出来,更加具体的记录一下,事实上主要是API的使用. Intent传递简单数据 能够以直接通过调用Intent的putExtra ...
- C#代码优化—字符串拼接效率比较
字符串拼接主要有以下几种方法: + : 加号 String.Format() : 字符串格式化 StringBuilder.Append() 说明 对于少量固定的字符串拼接,如string str = ...
- JavaScript概念梳理
一.JavaScript 的奇葩命名史 1995 年,网景浏览器(Netscape Navigator)首次发布了一种运行于浏览器端的脚本语言,网景给这个新语言命名为 LiveScript.一年后,为 ...
- Geocoding java调用百度地图API v2.0 图文 实例( 解决102错误)
如何使用? 第一步:申请ak(即获取密钥),若无百度账号则首先需要注册百度账号. 第二步,拼写发送http请求的url,注意需使用第一步申请的ak. 第三步,接收http请求返回的数据(支持json和 ...