在开发中可能会遇到这种需求,前端获取的地理坐标并不能在后台以double的形式表示,需要将其转化为其他样式比如:XX度XX分XX秒 的形式表示 进而转化为秒的形式即整形的形式

封装了两个类可直接实现地图经纬度坐标真实和整形表示方法的转换方式:

/**如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。*/
/***  传入地图坐标得到服务器存储度数**  @param degree 坐标*/
+(NSInteger)secondFromDegree:(CGFloat)degree{NSInteger degreeTemp,minuteTemp,secondTemp;CGFloat temp;degreeTemp = (NSInteger)degree;temp = (CGFloat)(degree - degreeTemp) * 60;minuteTemp = (NSInteger)temp;secondTemp = (NSInteger)((temp - minuteTemp) * 60);return degreeTemp * 3600 + minuteTemp * 60 + 21;
}
/***  传入服务器存储度数得到地图坐标**  @param second 服务器度数*/
+(CGFloat)degreeFromSecond:(NSInteger)second{NSInteger degreeTemp,minuteTemp,secondTemp;degreeTemp = (NSInteger)second / 3600;minuteTemp = (NSInteger)second % 3600 / 60;secondTemp = (NSInteger)second % 3600 % 60;return (CGFloat)(degreeTemp + (minuteTemp / 60.0) + (secondTemp / 3600.0));
}

经纬度互换
度(DDD):E 108.90593度 N 34.21630度
如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.
同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度
因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。

经纬度换算成米
纬度分为60分,每一分再分为60秒以及秒的小数。

纬度线投射在图上看似水平的平行线,但实际上是不同半径的圆。有相同特定纬度的所有位置都在同一个纬线上。
赤道的纬度为0°,将行星平分为南半球和北半球。
纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。
赤道、南回归线、北回归线、南极圈和北极圈是特殊的纬线。
纬度1秒的长度
地球的子午线总长度大约40008km。平均:
纬度1度 = 大约111km
纬度1分 = 大约1.85km
纬度1秒 = 大约30.9m
根据地球上任意两点的经纬度计算两点间的距离(可以用勾股定理c=a2+b2)
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:
C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = R*Arccos(C)*Pi/180
这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile
如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)
Distance = R*Arccos(C)*Pi/180

以上通过简单的三角变换就可以推出。
如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)
Distance = R*Arccos(C)*Pi/180

也就是:

C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)
Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。

iOS-地图真实坐标表示形式之间转换(double型,int型 互转)相关推荐

  1. iOS-地理坐标转换,原生地图获取的原始坐标转换为地图真实坐标

    GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984,Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator,国内出于相关法律法规要求,对国内所有GPS设备及地图数据都 ...

  2. 屏幕距离和坐便转换工具_地图经纬度坐标与屏幕坐标的转换(android版)

    我们在开发GIS系统的时候,首先要解决的就是地图的可视化问题,这个问题的关键就在于如何把地图的坐标转换成屏幕坐标,然后才到渲染着色.标注等.以下以wgs84经纬度坐标为基准,介绍一下地图经纬度坐标与屏 ...

  3. 百度android api坐标转地址,百度API从经纬度坐标到地址的转换服务

    /// /// 百度API从经纬度坐标到地址的转换服务 /// /// /// /// public string GetAddress(string lng, string lat) { strin ...

  4. python变量类型之间转换_python学习笔记5—数据类型转换

    数据类型转换 16进制和10进制之间转换In [18]: int('a',16) 把16进制的a转换为10进制的10,16说明a是16进制数 Out[18]: 10 In [13]: int('0xa ...

  5. 高德地图 gps坐标偏移到火星坐标系

    我国国情原因,gps采集到的坐标放在高德,谷歌等地图上,是会影响到坐标的精度的,这个时候是需要进行一些坐标偏移的操作的.本文适用于高德地图的坐标偏移. public static double pi ...

  6. 由GPS定位的经纬度转换成百度地图经纬度坐标

    /**  * @Description: 各地图API坐标系统比较与转换; WGS84坐标系:即地球坐标系,国际上通用的坐标系.设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, ...

  7. 高德地图获取坐标距离_利用java、js或mysql计算高德地图中两坐标之间的距离

    前言 因为工作的原因,最近在做与地图相关的应用,使用了高德地图,研究了下高德地图计算两坐标距离的方法,官网上提供的开发包中有相关的方法,但是我的产品中比较特殊,无法直接使用提供的方法,所以就自己封装了 ...

  8. ip地址转换数字函数 iton_IP地址的字符串形式和数字形式之间的相互转换函数

    最近要用到网络编程的东西,差一点自己去山寨已有的函数.基础不好,不知道已有函数可以满足需要,呵呵. 这个示例程序说的是ip地址的数字形式和字符串形式之间的相互转换. 从字符串形式转换到数字形式: in ...

  9. 百度 Google 全国 地图 火星坐标 产生原因(记录)

    为什么80%的码农都做不了架构师?>>>    1.偏移的起因:天朝测绘局以国家安全为理由,用法律的形式对所有在天朝发行的地图类产品加了强制性规范,要求所有地图类产品都必须使用国家测 ...

最新文章

  1. 一般使用机器学习算法遵循的步骤
  2. (38)编写 ShellCode
  3. 推荐四十多条纯干货 Java 代码优化建议
  4. matlab工具包pls,MATLAB PLS_tools PLS部分最小二乘工具箱(主程序)挺好用的数据分析程序 - 下载 - 搜珍网...
  5. css transition改动透明,使用CSS transition和animation改变渐变状态的实现方法
  6. idea常用快捷键和设置
  7. 【PAT (Basic Level) Practice (中文)】1029 旧键盘 (20分)
  8. Linux手动导入导出mysql数据库
  9. RTB竞价中的cookie mapping技术
  10. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
  11. 国内优秀的PHP后台管理系统(CMS)整理
  12. GC回收算法--当女友跟你提分手!
  13. Google抢Waze:除了地图还有什么?
  14. 微信useragent java_微信内置浏览器和小程序的 User Agent 区别及判断方法
  15. 解决CENTOS下There are no enabled repos.的问题
  16. js复制方法navigator.clipboard兼容性处理,控制台直接执行报错 DOMException: Document is not focused
  17. 微信支付-浅谈普通商户和子商户的开发区别
  18. 哈达玛矩阵的相关基础知识
  19. ConsenSys 产品ConsenSys Quorum
  20. copy-to-clipboard 的拷贝使用

热门文章

  1. 业绩爆雷预测 六大异常财务指标效果实测
  2. 神奇的 CSS,让文字智能适配背景颜色
  3. 001. 蓝海和红海
  4. 中国最美的、令人震撼的10大名山
  5. java linux 微软雅黑_Linux下安装宋体以及微软雅黑字体
  6. pycharm编程出现SyntaxError: Non-ASCII character ‘\xe5‘ in file错误
  7. VSC解决中文乱码问题
  8. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.my.mapper.UserM
  9. 如何用python写汉诺塔游戏的辅助
  10. 【NER综述】近五年中文电子病历命名实体识别研究进展