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 ...
随机推荐
- Web性能优化之图片延迟加载
来源:微信公众号CodeL 对于一些图片多,页面长的网页来说,如果每次打开页面加载全部的网页内容,页面加载速度势必会受到影响,如果每次打开网页只将网页可视区域的内容加载给用户 ,将大大提高网页浏览速度 ...
- 算法分析 Analysis of Algorithms -------GeekforGeeker 翻译
算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性 ...
- UVA 11235 Frequent Values ---RMQ
大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了 #include <iostream> #include <cstdio> #inclu ...
- java 21 - 14 Properties类
类 Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 注意:Properties是Has ...
- ArcGIS Engine 中 Geometric Network 显示流向代码
原文地址:http://hi.baidu.com/steeeeps/item/165fbc15475e94741009b5b3 非常感谢作者. 以前学习几何网络时,对效用网络流向进行了总结,原理与效果 ...
- f2fs解析(五)什么叫做compacted summary
f2fs中普通的summary是长这样的:每一个段的SSA block中,前半部分是这个段的SSA,然后对于HOT_DATA以及COLD_DATA段,存放是的是nat journal 和 sit jo ...
- C# 无边框窗体的最小化问题
WinForm在窗体风格设置成None时无法最小化的问题.添加以下代码即可实现最小化: protected override CreateParams CreateParams { get { con ...
- Java连接Elasticsearch集群
package cn.test; import java.net.InetAddress; import java.net.UnknownHostException; import org.elast ...
- 加密算法使用(三):用用BASE64
采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到 package testEncrypt; import java.security.Key; import java.secu ...
- cannot change version web module 3.0
eclipse如何修改dynamic web module version 由于从SVN down下来的工程java及tomcat 版本比本地高,导致工程不能编译,报以下错误. 1.Java comp ...