原生地图获取坐标转化为真实坐标,火星坐标

news/2024/7/20 21:10:53 标签: ios, 地图, class
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

在项目中,发现获取的坐标点与实际坐标不一致, 后查阅相关资料后,知道是坐标系的问题。


自己写了个坐标转换类, 在项目中新建一个类,把以下.h/ .m文件拷贝,使用时调取转换方法即可。


.h文件把以下文件拷贝

//  Created by 汪亮 on 16/8/10.

//  Copyright © 2016 深圳市寄轻松科技有限公司. All rights reserved.

//


#import <Foundation/Foundation.h>


#import <CoreLocation/CoreLocation.h>


@interface GPSLocationTool : NSObject

/**

 *  public:原生class="tags" href="/tags/DiTu.html" title=地图>地图获取坐标转化为真实坐标

 *

 *  @param latLng 原生坐标点

 *

 *  @return 真实坐标点

 */

+ (CLLocationCoordinate2D)transform:(CLLocationCoordinate2D)latLng;

@end



.m文件拷贝以下文件

//  Created by 汪亮 on 16/8/10.

//  Copyright © 2016 深圳市寄轻松科技有限公司. All rights reserved.

//


#import "GPSLocationTool.h"


#import <CoreLocation/CoreLocation.h>


@implementation GPSLocationTool


const double a = 6378245.0;

const double ee = 0.00669342162296594323;


/**

 *  public:原生class="tags" href="/tags/DiTu.html" title=地图>地图获取坐标转化为真实坐标

 *

 *  @param latLng 原生坐标点

 *

 *  @return 真实坐标点

 */

+ (CLLocationCoordinate2D)transform:(CLLocationCoordinate2D) latLng

{

    double wgLat = latLng.latitude;

    double wgLon = latLng.longitude;

    double mgLat;

    double mgLon;

    

    if ([self outOfChina:wgLat :wgLon ])

    {

        return latLng;

    }

    double dLat = [self transformLat:wgLon-105.0 :wgLat - 35 ];

    double dLon = [self transformLon:wgLon-105.0 :wgLat - 35 ];

    

    double radLat = wgLat / 180.0 * M_PI;

    double magic = sin(radLat);

    magic = 1 - ee * magic * magic;

    double sqrtMagic = sqrt(magic);

    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);

    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI);

    mgLat = wgLat + dLat;

    mgLon = wgLon + dLon;

    CLLocationCoordinate2D loc2D ;

    loc2D.latitude = mgLat;

    loc2D.longitude = mgLon;

    

    return loc2D;

}


#pragma mark private

+ (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;

}


+ (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(fabs(x));

    ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 *sin(2.0 * x *M_PI)) * 2.0 /

    3.0;

    ret += (20.0 * sin(y * M_PI) + 40.0 *sin(y / 3.0 *M_PI)) * 2.0 / 3.0;

    ret += (160.0 * sin(y / 12.0 * M_PI) + 320 *sin(y * M_PI / 30.0)) * 2.0 /

    3.0;

    return ret;

}


+ (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(fabs(x));

    ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 /

    3.0;

    ret += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0;

    ret += (150.0 * sin(x / 12.0 *M_PI) + 300.0 *sin(x / 30.0 * M_PI)) * 2.0 /

    3.0;

    return ret;

}


@end




http://www.niftyadmin.cn/n/1607329.html

相关文章

百度开放云·云学府开讲啦!

↓↓↓ 点击"阅读原文" 立即报名参与

第6章 函 数

第6章 函 数 函数是C中的基本模块单元。一个函数设计用于执行特定的功能,它的名称通常反映其功能。一个函数包含说明和语句。本章描述如何说明、定义和调用函数的。其它讨论的主题有: * 函数概述 * 函数定义 * 函数原型 * 函数调用 函数概述 函数必须有一个定义和一个说明…

5000元代金券免费送给你,相约开放云文档反馈

听说你火眼金睛赛大圣&#xff0c;心思细密若孔明&#xff1f;那就快来百度开放云官网&#xff0c;对产品文档提出宝贵建议吧&#xff01;&#xff01;奖品已备好&#xff0c;就等专业的你&#xff01;我们将会根据您的反馈&#xff0c;不断更新完善产品文档。活动内容2015年7月…

云+智能,助力“互联网+”

2015&#xff08;第十四届&#xff09;中国互联网大会于7月21日在北京国际会议中心召开&#xff0c;百度开放云总经理刘炀受邀参加&#xff0c;并做了题为《云智能&#xff0c;助力“互联网”》的演讲。为什么互联网火了&#xff1f;“互联网为什么火&#xff1f;”演讲开场&am…

'++'is deprecated: it will be removed in swift 3

近期学Swift&#xff0c;当在使用到 操作符时&#xff0c;警告过期了&#xff0c;看官方解释如下。 The and -- operators have been deprecated, and are slated to be removed in Swift 3.0. As a replacement, use x 1 on integer or floating point types, and x x.suc…

第7章 词 法 规 定

第7章 词 法 规 定 本章介绍C程序的基本元素,你使用这些被称为“词法元素”或“符号”的元素去构造语句、定义、说明等,并使用它们构造完整的程序。本章讨论以下词法元素&#xff1a; * 语言符号 * 注释 * 标识符 * 关键字 * 标点符号 * 运算符 * 文字 本章还包括表1.…

百度开放云的线下沙龙·云学府爆棚啦!

就在昨天下午14:00&#xff0c;百度开放云的线下沙龙——云学府&#xff0c;首场线下沙龙活动在现场为开放云的粉丝们&#xff0c;带来了一场充满干货又极具趣味的沙龙。下午一点&#xff0c;离活动开始还有一小时&#xff0c;就已经有很多真爱粉来到现场&#xff0c;一问才知道…

来自奥地利的经典之声——AKG K314P耳机小评

奥地利著名的耳机厂商爱科技AKG是人们熟知的耳机品牌&#xff0c;而这个品牌的产品线可谓非常广&#xff0c;而其中K314P又是AKG旗下一个经典的耳塞型号&#xff0c;它优秀的性价比&#xff0c;精致的做工&#xff0c;玲珑的声音都给大家留下深刻的印象。而这次AKG正是贴合市场…