IOS 计算两个经纬度之间的距离
IOS 计算两个经纬度之间的距离
一 丶
-(double)distanceBetweenOrderBy:(double) lat1 :(double) lat2 :(double) lng1 :(double) lng2{ CLLocation *curLocation = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1]; CLLocation *otherLocation = [[CLLocation alloc] initWithLatitude:lat2 longitude:lng2]; double distance = [curLocation distanceFromLocation:otherLocation]; return distance; }
二丶
//将角度转为弧度
+ (float)radians:(float)degrees{
return (degrees*3.14159265)/180.0;
}
//根据经纬度换算出直线距离
+ (float)getDistance:(float)lat1 lng1:(float)lng1 lat2:(float)lat2 lng2:(float)lng2
{
//地球半径
int R = 6378137;
//将角度转为弧度
float radLat1 = [self radians:lat1];
float radLat2 = [self radians:lat2];
float radLng1 = [self radians:lng1];
float radLng2 = [self radians:lng2];
//结果
float s = acos(cos(radLat1)*cos(radLat2)*cos(radLng1-radLng2)+sin(radLat1)*sin(radLat2))*R;
//精度
s = round(s* 10000)/10000;
return round(s);
}
经纬度简介
度换算成度分秒
对于两个点,在纬度相等的情况下:
经度每隔0.00001度,距离相差约1米;每隔0.0001度,距离相差约10米;每隔0.001度,距离相差约100米;每隔0.01度,距离相差约1000米;每隔0.1度,距离相差约10000米。
对于两个点,在经度相等的情况下:
纬度每隔0.00001度,距离相差约1.1米;每隔0.0001度,距离相差约11米;每隔0.001度,距离相差约111米;每隔0.01度,距离相差约1113米;每隔0.1度,距离相差约11132米。

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = R*Arccos(C)*Pi/180
- <span style="font-size:14px;font-weight: normal;"> private static final double EARTH_RADIUS = 6378137;//赤道半径(单位m)
- /**
- * 转化为弧度(rad)
- * */
- private static double rad(double d)
- {
- return d * Math.PI / 180.0;
- }
- /**
- * 基于余弦定理求两经纬度距离
- * @param lon1 第一点的精度
- * @param lat1 第一点的纬度
- * @param lon2 第二点的精度
- * @param lat3 第二点的纬度
- * @return 返回的距离,单位km
- * */
- public static double LantitudeLongitudeDist(double lon1, double lat1,double lon2, double lat2) {
- double radLat1 = rad(lat1);
- double radLat2 = rad(lat2);
- double radLon1 = rad(lon1);
- double radLon2 = rad(lon2);
- if (radLat1 < 0)
- radLat1 = Math.PI / 2 + Math.abs(radLat1);// south
- if (radLat1 > 0)
- radLat1 = Math.PI / 2 - Math.abs(radLat1);// north
- if (radLon1 < 0)
- radLon1 = Math.PI * 2 - Math.abs(radLon1);// west
- if (radLat2 < 0)
- radLat2 = Math.PI / 2 + Math.abs(radLat2);// south
- if (radLat2 > 0)
- radLat2 = Math.PI / 2 - Math.abs(radLat2);// north
- if (radLon2 < 0)
- radLon2 = Math.PI * 2 - Math.abs(radLon2);// west
- double x1 = EARTH_RADIUS * Math.cos(radLon1) * Math.sin(radLat1);
- double y1 = EARTH_RADIUS * Math.sin(radLon1) * Math.sin(radLat1);
- double z1 = EARTH_RADIUS * Math.cos(radLat1);
- double x2 = EARTH_RADIUS * Math.cos(radLon2) * Math.sin(radLat2);
- double y2 = EARTH_RADIUS * Math.sin(radLon2) * Math.sin(radLat2);
- double z2 = EARTH_RADIUS * Math.cos(radLat2);
- double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)+ (z1 - z2) * (z1 - z2));
- //余弦定理求夹角
- double theta = Math.acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / (2 * EARTH_RADIUS * EARTH_RADIUS));
- double dist = theta * EARTH_RADIUS;
- return dist;
- }</span>
1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
3.6378.137为地球半径,单位为千米;
计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米。
计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。
- <span style="font-size:14px;"> private static final double EARTH_RADIUS = 6378137;//赤道半径(单位m)
- /**
- * 转化为弧度(rad)
- * */
- private static double rad(double d)
- {
- return d * Math.PI / 180.0;
- }
- /**
- * 基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下
- * @param lon1 第一点的精度
- * @param lat1 第一点的纬度
- * @param lon2 第二点的精度
- * @param lat3 第二点的纬度
- * @return 返回的距离,单位km
- * */
- public static double GetDistance(double lon1,double lat1,double lon2, double lat2)
- {
- double radLat1 = rad(lat1);
- double radLat2 = rad(lat2);
- double a = radLat1 - radLat2;
- double b = rad(lon1) - rad(lon2);
- double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
- s = s * EARTH_RADIUS;
- //s = Math.round(s * 10000) / 10000;
- return s;
- }</span>
IOS 计算两个经纬度之间的距离的更多相关文章
- 计算两个经纬度之间的距离(python算法)
EARTH_REDIUS = 6378.137 def rad(d): return d * pi / 180.0 def getDistance(lat1, lng1, lat2, lng2): r ...
- reactjs中使用高德地图计算两个经纬度之间的距离
第一步下载依赖 npm install --save react-amap 第二步,在组件中使用 import React, { Component } from 'react' import { L ...
- iOS 计算两个坐标之间的距离
//第一个坐标 CLLocation *before=[[CLLocation alloc] initWithLatitude:29.553968 longitude:106.538872]; //第 ...
- java计算两个经纬度之间的距离
/** * 计算点 是否在一个固定点的半径范围内 * @2016年10月20日 * @param a 经度1 已知 * @param b 纬度1 已知 * @param x 经度2 * @param ...
- java如何计算两个经纬度之间的距离?
/*计算两个经纬度之间的距离 结果单位:米 */public static double getDistance(String lat1Str, String lng1Str, String lat2 ...
- 高德地图 API 计算两个城市之间的距离
1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...
- Java计算两个经纬度间的距离最简单的方式
开发中经常会遇到计算两个点(经纬度)之间的距离或者计算最近门店的场景,下面简单实现一下如何计算两个经纬度之间相隔的距离. 1.导入geodesy的maven依赖 或者到阿里云maven仓库下载jar包 ...
- PHP MYSQL 搜索周边坐标,并计算两个点之间的距离
搜索附近地点,例如,坐标(39.91, 116.37)附近500米内的人,首先算出“给定坐标附近500米”这个范围的坐标范围. 虽然它是个圆,但我们可以先求出该圆的外接正方形,然后拿正方形的经纬度范围 ...
- iOS 计算两个日期之间的天数问题
//获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...
随机推荐
- oracle11G在linux环境下的卸载操作
1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus logSQL> connect / as sysdbaSQL> shutdown ...
- Ubuntu 12.04 DNS服务器的配置方法
Bind是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件, ...
- css中元素居中总结
很多时候,我们需要让元素居中显示:1. 一段文本的水平居中,2. 一张图片的水平居中,3. 一个块级元素的水平居中:4. 单行文本的竖直居中,5. 不确定高度的一段文本竖直居中,6. 确定高度的块级元 ...
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...
- Django数据库怎么给字段设置主键
id = models.IntegerField(primary_key = True) 附: null :缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField ...
- [Editor]Unity Editor类常用方法
Editor文档资料 Unity教程之-Unity Attribute的使用总结:http://www.unity.5helpyou.com/3550.html 利用unity3d属性来设置Inspe ...
- HTML5之应用缓存---manifest---缓存使用----HTML5的manifest缓存
相信来查这一类问题的都是遇到问题或者是初学者吧! 没关系相信你认真看过之后就会知道明白的 这是HTML5新加的特性 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连 ...
- Oracle 排序中使用nulls first 或者nulls last 语法
-原理 Nulls first和nulls last是Oracle Order by支持的语法 如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc ...
- UMLUnified Modeling Language (UML)又称统一建模语言或标准建模语言
1.用例图(use case diagram) 2.活动图(activity diagram) 3.静态结构图 4.顺序图(Sequence Diagram):时序图 5.交互纵览图(Interact ...
- GitHub入门之一:使用github下载项目
git作为目前比较流行的版本控制系统,被各个互联网公司广泛使用着.目前国外的网站有GitHub,国内的有CSDN和OSCHINA的git. 使用git可以很方便地进行多人协作和版本控制.作为一个入门小 ...