最近在做一个地图项目,关于GPS转火星高德坐标的算法如下

希望对各位开发者有用,测试误差不大

#pragma mark - 高德地图GPS转坐标
// location lati, longi
#define pi 3.14159265358979324
NSArray * TransformGPStoMAMAP(NSString * location) {
    NSArray * result = nil;
    // a = 6378245.0, 1/f = 298.3
    // b = a * (1 - f)
    // ee = (a^2 - b^2) / a^2;
    const double a = 6378245.0;
    const double ee = 0.00669342162296594323;

    NSArray * tmpArr = [location componentsSeparatedByString:@","];
    double wgLat = [[tmpArr firstObject] doubleValue];
    double wgLon = [[tmpArr lastObject] doubleValue];

    //
    // World Geodetic System ==> Mars Geodetic System
    if (outOfChina(wgLat, wgLon))
    {
        result = @[[NSNumber numberWithDouble:wgLat], [NSNumber numberWithDouble:wgLon]];

        return result;
    }

    double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
    double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
    double radLat = wgLat / 180.0 * pi;
    double magic = sin(radLat);
    magic = 1 - ee * magic * magic;
    double sqrtMagic = sqrt(magic);
    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi);
    wgLat = wgLat + dLat;
    wgLon = wgLon + dLon;

    result = @[[NSNumber numberWithDouble:wgLat], [NSNumber numberWithDouble:wgLon]];

    return result;
}

static bool outOfChina(double lat, double lon)
{
    if (lon < 72.004 || lon > 137.8347)
        return true;
    if (lat < 0.8293 || lat > 55.8271)
        return true;

    return false;
}

static double transformLat(double x, double y)
{
    double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(ABS(x));
    ret += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * sin(y * pi) + 40.0 *sin(y / 3.0 * pi)) * 2.0 / 3.0;
    ret += (160.0 * sin(y / 12.0 * pi) + 320 * sin(y * pi / 30.0)) * 2.0 / 3.0;

    return ret;
}

static double transformLon(double x, double y)
{
    double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(ABS(x));
    ret += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * sin(x * pi) + 40.0 * sin(x / 3.0 * pi)) * 2.0 / 3.0;
    ret += (150.0 * sin(x / 12.0 * pi) + 300.0 * sin(x / 30.0 * pi)) * 2.0 / 3.0;

    return ret;
}
时间: 2024-10-27 02:52:56

最近在做一个地图项目,关于GPS转火星高德坐标的算法如下的相关文章

用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量.<s:iterator>标签有一个value属性,用来存放在Action类的方法中存数据的list集合,还有一个id,好像是说指定集合的索引的意思,就是给list集合遍历出来的每个对象加上一个数字标签,反正我是这么理解的,没用过.还有一个很重要,就是var变量,我在s:iterator按ctr

如何做一个软件项目经理? ----写给公司所有的开发人员

注:文本中的"我",均是网上作者(前三部分来自网络文章,第四部分除外). 第一部分:软件项目经理的要求 首先是一个管理者,其次熟悉某些工具,某几种语言,行业背景,项目管理技能. 软件项目经理面临的恶劣环境,我们绝大部分软件企业运行在相对混乱的状态(CMM一级),组织不大可能对项目以及项目经理的责任做出明确.合适的界定,所以,影响项目成功的一切因素都是项目经理的责任,包括客户.环境.考核.激励等等. 一.责任心.取得项目的成功无疑是项目经理的责任.项目经理只有把客户的满意和企业长期利益作

从头开始做一个OA项目(三) 关于三层架构思想

下面就开始一步一步的搭建我们的项目三层架构,自从微软的PetShop推出以来,似乎它就成了三层的代名词.在国内.Net界几乎所有的项目都是根据PetShop来搭建三层架构,甚至我还见过一些项目直接就把它的架构拷贝过来,一丝未改.直接使用.在搭建之前,为了便于还未接触过三层的同学了解.我们先把三层架构的基本概念解释一下.我们先来思考一个场景.我们大家都去过饭店吃饭,那么大家回忆一下我们吃饭的流程是个什么样子呢?如下图所示. 当我们推开饭店的大门,马上就会迎来一个笑容可掬的服务员,她会忙着招待我们,

从头开始做一个OA项目(五) 面向接口编程和层之间关系引用

UI    前一篇我们已经带领大家搭建了一个非常简单的三层架构,并且按照搭建顺序完成(实体类库,数据访问,业务逻辑,UI,关于搭建三层的顺序,并没有统一的说法,但是我习惯于从下而上的搭建).再贴一次图(1-1)我们来回忆一下. 图1-1 (一)  添加引用关系 我们现在要为三层各个类库之间引用关系.按照前面我们在讲解三层的文章来做一下引用关系.数据访问层引用实体类库,业务逻辑层引用数据访问,UI层引用业务逻辑层,那么这三层之间都要引用实体类库.这里再次强调一下,实体类库不属于三层中的层次结构,实

用springboot框架做一个web项目实现简单的增,删,改,查功能的流程

完成这个项目主要过程如下: 1  首先要读懂需求,这样我们才能跟好的去设计细节,是做出来的东西更好的符合要求. 2 根据需求创建相应的实体类,例如学生管理系统,我们是不是该创建一个学生的实体类,然后根据具体的要求,需要 哪些学生的信息,比如,姓名.年龄.性别.身份证号码.班级.电话等等.把他们都设置为学生的属性. 3  根据学生的属性去创建一个学生表在数据库中,把每一个学生的属性设置为学生表中的一个字段,在设置字段的时候应该要让表中的 实体类中的名称劲量一致,这样会避免不必要的麻烦.其次他们的类

Winform窗体用对象数组做一个小项目

首先我我们看一下需求:我们要做的是显示员工信息,实现项目经理给员工评分的功能! 首先项目经理是评分的人所以没有用,因为我们自己写,评分的就是我们自己.所以我们要做的是先在vs也就是我们的环境里建一个项目,在建一个Windows窗体应用程序,然后把控件拖好! 左边是查看员工的信息窗体,右边是给员工评分的窗体: 1.我们现在开始代码部分 我们首先需要一个辅助类,在辅助类里我们要做什么呢?我们要写这些东西. public int id;        public int age;        pu

【0】分享一个正在做的SSM项目

正在做一个外包项目,虽然老板百般让我复制别人写好的代码(普通jsp跟servlet做的,一个字:乱). 但是!!我怎么可能这么没有追求,学了一段时间的SSM框架后,果断用SSM改装了,当然咯,前端的版式和模样都一样,所以看着没区别.可以后期维护肯定不一样的.维护起来一定会越来越深刻.按照我想法,用jsp跟servlet直接干的,维护起来只能让自己的思路越来越乱,这样是做不了大项目的. 有需求项目经验,但是找不到合适项目的,我可以共享给你(一起交流,一起做,please留言),当然了,项目用的数据

做一个微信语音点播系统

最近在做一个微信项目,接触到了微信公众平台.通过公众平台可以很方便的搭建一个功能完善的移动应用.昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口. 这篇文章的应用将使用到高级接口中的语音识别,以及音乐回复接口.通过这两个接口,让大家体验一下语音点歌的魅力. 这个应用简单的来说:就是你向微信公众平台报一首歌名,微信公众平台返回这首歌曲给你听.本文将一步一步教你如何实现这个看似复杂的移动应用. 下面是我申请的测试账号的二维码,大家可以关注一下测试一下效果,不过测试账号的有效期只有一年,最

我想做一个合格的工程师

我想吐槽下,在新公司经过三个月的试用期,前两天终于完成了转正答辩,其实答辩就是两个我们项目组的两个项目经理(一个项目经理马上要离任了,另外一个新来的两个月,继任前者作为项目经理.),还有一个人事的同事.连一个部门经理或者稍大点的领导都没有参与我的答辩.感觉答辩的意义都没有了,但是巨坑的是,新项目经理说“有木有打算培训班学习想法”,“对数据库的应用要学习学习”,我想这不是赤裸裸讽刺我基础太差么?其实我确实来这家公司之前,没有用过MVC,这个能力也学稍弱与这个项目经理.但是我可以讲,我的其他能力绝对