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 ...
随机推荐
- Ubuntu 12.04 DNS服务器的配置方法
Bind是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件, ...
- zookeeper适用场景:分布式锁实现
问题导读:1.zookeeper如何实现分布式锁?2.什么是羊群效应?3.zookeeper如何释放锁? 在zookeeper应用场景有关于分布式集群配置文件同步问题的描述,设想一下如果有100台机器 ...
- 【NOIP提高组2015D2T1】uva 714 copying books【二分答案】——yhx
Before the invention of book-printing, it was very hard to make a copy of a book. All the contents h ...
- NOIP2008提高组火柴棒等式(模拟)——yhx
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- ckplayer播放器去掉右边的开关灯分享插件
在上一篇文章中介绍了如何使用ckplayer播放器,但是有的人不需要CK播放器右边的开关灯分享插件,那么就需要把该插件给去掉,方法也很简单. 第一步:先打开ckplayer.js里找到下面三行删除掉 ...
- HDU 1671 Phone List
一道字典树的模板题,每次插入前查询是否有该串的某个前缀子串存在,或者该串是否某个串的前缀.具体实现是在插入时串的结尾做一个标记,如果某一个串在查询的时候找到一个标记,说明存在前缀:第二种情况是这个串遍 ...
- Java虚拟机详解04----GC算法和种类【重要】
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- SQL Server 2005 安装图解教程(Windows)
因工作需要,好久未安装SQL Server2005,今天安装了一下,特此写下安装步骤留下笔记. 安装前准备: 先安装IIS,再安装SQL Server2005 一.安装 点击安装,如下图: 选择操作系 ...
- Android中的三种XML解析方式
在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析 ...
- java9-5 修饰符
1. 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰符,public 状 ...
