精华内容
下载资源
问答
  • 根据两点经纬度求距离
  • 已知经纬度求距离

    2019-12-20 13:57:59
    已知经纬度求距离 如下图所示,已知点A的经度θA\theta_AθA​和纬度φA\varphi_AφA​以及点B的经纬度θB\theta_BθB​和φB\varphi_BφB​,两点的距离。图中点C为地球北极,其与点A和点B构成了一个球面三角形△...

    已知经纬度求距离

    如下图所示,已知点A的经度 θ A \theta_A θA和纬度 φ A \varphi_A φA以及点B的经纬度 θ B \theta_B θB φ B \varphi_B φB,求两点的距离。图中点C为地球北极,其与点A和点B构成了一个球面三角形 △ A B C \bigtriangleup ABC ABC,三角形三边长分别为 a a a b b b c c c。点F、D、E分别为本初子午线、过点A的经线以及过点B的经线与赤道面的交点。
    首先将地球视为一单位圆球,则根据球面三角形余弦定理,有 c o s c = c o s a c o s b + s i n a s i n b c o s C cosc=cosacosb+sinasinbcosC cosc=cosacosb+sinasinbcosC
    对于单位圆球来说,球面三角形边的弧长即为相应球心角的弧度,即 b = ∠ A O C = π / 2 − φ A b=\angle AOC=\pi/2-\varphi_A b=AOC=π/2φA a = ∠ C O B = π / 2 − φ B a=\angle COB=\pi/2-\varphi_B a=COB=π/2φB
    ∠ C \angle C C是平面 C O D COD COD和平面 C O E COE COE的夹角 ∠ C = ∠ D O E = θ B − θ A \angle C=\angle DOE=\theta_B-\theta_A C=DOE=θBθA
    代入余弦定理公式,得 c o s c = c o s ( π / 2 − φ A ) c o s ( π / 2 − φ B ) + s i n ( π / 2 − φ A ) s i n ( π / 2 − φ B ) c o s ( θ B − θ A ) = s i n ( φ A ) s i n ( φ B ) + c o s ( φ A ) c o s ( φ B ) c o s ( θ B − θ A ) cosc=cos(\pi/2-\varphi_A)cos(\pi/2-\varphi_B)+sin(\pi/2-\varphi_A)sin(\pi/2-\varphi_B)cos(\theta_B-\theta_A)\\=sin(\varphi_A)sin(\varphi_B)+cos(\varphi_A)cos(\varphi_B)cos(\theta_B-\theta_A) cosc=cos(π/2φA)cos(π/2φB)+sin(π/2φA)sin(π/2φB)cos(θBθA)=sin(φA)sin(φB)+cos(φA)cos(φB)cos(θBθA)
    因此 c = a r c c o s ( s i n ( φ A ) s i n ( φ B ) + c o s ( φ A ) c o s ( φ B ) c o s ( θ B − θ A ) ) c=arccos(sin(\varphi_A)sin(\varphi_B)+cos(\varphi_A)cos(\varphi_B)cos(\theta_B-\theta_A)) c=arccos(sin(φA)sin(φB)+cos(φA)cos(φB)cos(θBθA))
    再由弧长计算公式 弧 长 = 弧 度 × 半 径 弧长=弧度\times半径 =×
    则可计算两点间得距离 S = c × R e = R e × a r c c o s ( s i n ( φ A ) s i n ( φ B ) + c o s ( φ A ) c o s ( φ B ) c o s ( θ B − θ A ) ) S=c\times R_e=R_e\times arccos(sin(\varphi_A)sin(\varphi_B)+cos(\varphi_A)cos(\varphi_B)cos(\theta_B-\theta_A)) S=c×Re=Re×arccos(sin(φA)sin(φB)+cos(φA)cos(φB)cos(θBθA))
    其中 R e 为 地 球 半 径 R_e为地球半径 Re

    在这里插入图片描述

    展开全文
  • 经纬度求距离与方向角

    转载地址:http://blog.csdn.net/liang5630/article/details/42775997

    package com.liang.test;
    
    public class AngleUtil {
    
    	public static void main(String[] args) {
    		MyLatLng A=new MyLatLng(113.249648,23.401553);
    		MyLatLng B=new MyLatLng(113.246033,23.403362);
    		System.out.println(getAngle(A,B));
    	}
    	/**
    	 * 求B点经纬度
    	 * @param A 已知点的经纬度,
    	 * @param distance   AB两地的距离  单位km
    	 * @param angle  AB连线与正北方向的夹角(0~360)
    	 * @return  B点的经纬度
    	 */
    	public static MyLatLng getMyLatLng(MyLatLng A,double distance,double angle){
    		
    		double dx = distance*1000*Math.sin(Math.toRadians(angle));
    		double dy= distance*1000*Math.cos(Math.toRadians(angle));
    		
    		double bjd=(dx/A.Ed+A.m_RadLo)*180./Math.PI;
    		double bwd=(dy/A.Ec+A.m_RadLa)*180./Math.PI;
    		return new MyLatLng(bjd, bwd);
    	}
    	
    	/**
    	 * 获取AB连线与正北方向的角度
    	 * @param A  A点的经纬度
    	 * @param B  B点的经纬度
    	 * @return  AB连线与正北方向的角度(0~360)
    	 */
    	public  static double getAngle(MyLatLng A,MyLatLng B){
    		double dx=(B.m_RadLo-A.m_RadLo)*A.Ed;
    		double dy=(B.m_RadLa-A.m_RadLa)*A.Ec;
    		double angle=0.0;
    		angle=Math.atan(Math.abs(dx/dy))*180./Math.PI;	
    		double dLo=B.m_Longitude-A.m_Longitude;
    		double dLa=B.m_Latitude-A.m_Latitude;
    		if(dLo>0&&dLa<=0){
    			angle=(90.-angle)+90;
    		}
    		else if(dLo<=0&&dLa<0){
    			angle=angle+180.;
    		}else if(dLo<0&&dLa>=0){
    			angle= (90.-angle)+270;
    		}
    		return angle;
    	}
    	static class MyLatLng {
    		final static double Rc=6378137;
    		final static double Rj=6356725;
    		double m_LoDeg,m_LoMin,m_LoSec;
    		double m_LaDeg,m_LaMin,m_LaSec;
    		double m_Longitude,m_Latitude;
    		double m_RadLo,m_RadLa;
    		double Ec;
    		double Ed;
    		public MyLatLng(double longitude,double latitude){
    			m_LoDeg=(int)longitude;
    			m_LoMin=(int)((longitude-m_LoDeg)*60);
    			m_LoSec=(longitude-m_LoDeg-m_LoMin/60.)*3600;
    			
    			m_LaDeg=(int)latitude;
    			m_LaMin=(int)((latitude-m_LaDeg)*60);
    			m_LaSec=(latitude-m_LaDeg-m_LaMin/60.)*3600;
    			
    			m_Longitude=longitude;
    			m_Latitude=latitude;
    			m_RadLo=longitude*Math.PI/180.;
    			m_RadLa=latitude*Math.PI/180.;
    			Ec=Rj+(Rc-Rj)*(90.-m_Latitude)/90.;
    			Ed=Ec*Math.cos(m_RadLa);
    		}
    	}
    }
    


    展开全文
  • 一、准备 第一步,申请密钥(ak) ,作为访问服务的依据; 第二步,拼写发送http请求的url,注意需使用第一... ... ...1 根据两地经纬度求距离其路线规划 http://api.map.baidu.com/direction/v1?mode=walking&origin=23

    一、准备

    第一步,申请密钥(ak) ,作为访问服务的依据;

    第二步,拼写发送http请求的url,注意需使用第一步申请的ak;

    第三步,接收http请求返回的数据(json或xml格式),根据返回值说明解析数据。

    二、 API举例

    1 根据两地经纬度求距离其路线规划

    http://api.map.baidu.com/direction/v1?mode=walking&origin=23.129037339779,113.35911645082&destination=23.123858949557,113.32326819685&origin_region=%E5%B9%BF%E5%B7%9E&destination_region=%E5%B9%BF%E5%B7%9E&output=json&ak=xEETdReQI0ATOkRq7BihWDil

    2 根据地址求经纬度

    http://api.map.baidu.com/geocoder/v2/?address=%E5%B9%BF%E4%B8%9C%E7%9C%81%E5%B9%BF%E5%B7%9E%E5%B8%82%E5%A4%A9%E6%B2%B3%E5%8C%BA%E5%8D%8E%E5%88%A9%E8%B7%AF19%E5%8F%B7&output=json&ak=xEETdReQI0ATOkRq7BihWDil
    返回结果:
           
    {
    <span style="white-space:pre">	</span>status: 0,
    <span style="white-space:pre">	</span>result: {
    <span style="white-space:pre">	</span>location: {
    <span style="white-space:pre">		</span>lng: 113.32326819685,
    <span style="white-space:pre">		</span>lat: 23.123858949557
    <span style="white-space:pre">	</span>},
    <span style="white-space:pre">	</span>precise: 1,
    <span style="white-space:pre">	</span>confidence: 80,
    <span style="white-space:pre">	</span>level: "道路"
    <span style="white-space:pre">	</span>}
    }

    3 根据经纬度获取具体的地址

    http://api.map.baidu.com/geocoder/v2/?ak=xEETdReQI0ATOkRq7BihWDil&callback=renderReverse&location=23.123858949557,113.32326819685&output=json&pois=1

    返回结果:
           
    {
    status: 0,
    result: {
    location: {
    lng: 113.32326815373,
    lat: 23.123858978888
    },
    formatted_address: "广东省广州市天河区华利路19号",
    business: "岭南,珠江新城,跑马场",
    addressComponent: {
    city: "广州市",
    country: "中国",
    direction: "附近",
    distance: "8",
    district: "天河区",
    province: "广东省",
    street: "华利路",
    street_number: "19号",
    country_code: 0
    },
    pois: [
    {
    addr: "天河区珠江新城华利路21号",
    cp: "NavInfo",
    direction: "内",
    distance: "0",
    name: "远洋明珠大厦商务楼",
    poiType: "房地产",
    point: {
    x: 113.32279411791,
    y: 23.124061717238
    },
    tag: "房地产",
    tel: "",
    uid: "05f37ab0c644e1fe4d554704",
    zip: ""
    },
    {
    addr: "天河区珠江新城CBD西南部",
    cp: "NavInfo",
    direction: "东北",
    distance: "94",
    name: "富力爱丁堡国际公寓",
    poiType: "房地产",
    point: {
    x: 113.32280310096,
    y: 23.123197584411
    },
    tag: "房地产;住宅区",
    tel: "",
    uid: "64ff3be1f47b22a290114c1d",
    zip: ""
    },
    {
    addr: "广州市越秀区珠江新城西区华利路25号",
    cp: "NavInfo",
    direction: "西",
    distance: "75",
    name: "珠江都荟",
    poiType: "房地产",
    point: {
    x: 113.32393496591,
    y: 23.123762594973
    },
    tag: "房地产;住宅区",
    tel: "",
    uid: "e93761f6370c2171223bf2e6",
    zip: ""
    },
    {
    addr: "华利路25号",
    cp: "NavInfo",
    direction: "西南",
    distance: "65",
    name: "私享家酒店式公寓(华利路店)",
    poiType: "酒店",
    point: {
    x: 113.32380022008,
    y: 23.124086644063
    },
    tag: "酒店;公寓式酒店",
    tel: "",
    uid: "5508504d7f65aad2c7f02546",
    zip: ""
    },
    {
    addr: "珠江新城华利路13号远洋明珠大厦西侧",
    cp: "NavInfo",
    direction: "附近",
    distance: "26",
    name: "嘉意挪威三文鱼",
    poiType: "美食",
    point: {
    x: 113.3230366604,
    y: 23.123804139772
    },
    tag: "美食;外国餐厅",
    tel: "",
    uid: "b83f95d862cf10f47dc8768e",
    zip: ""
    },
    {
    addr: "天河区华利路25号珠江都荟A2栋首层2-4",
    cp: "NavInfo",
    direction: "西南",
    distance: "55",
    name: "紅牆麗舍咖啡酒廊",
    poiType: "美食",
    point: {
    x: 113.32356666065,
    y: 23.124227895982
    },
    tag: "美食;咖啡厅",
    tel: "",
    uid: "b292b3aaf0ad314fbe4842cb",
    zip: ""
    },
    {
    addr: "广州市越秀区珠江新城华利路2号富力爱丁堡国际公寓2楼",
    cp: "NavInfo",
    direction: "东北",
    distance: "66",
    name: "醇金宴会",
    poiType: "美食",
    point: {
    x: 113.3228749654,
    y: 23.123446854073
    },
    tag: "美食;中餐厅",
    tel: "",
    uid: "f44609186077db73b01e369b",
    zip: ""
    },
    {
    addr: "广州市越秀区新城华利路15号远洋明珠大厦北塔1楼",
    cp: "NavInfo",
    direction: "附近",
    distance: "44",
    name: "康辰医疗",
    poiType: "医疗",
    point: {
    x: 113.32316242317,
    y: 23.124211278117
    },
    tag: "医疗;诊所",
    tel: "",
    uid: "00f1c7fb4a206a1ec056ac07",
    zip: ""
    },
    {
    addr: "华利路25号珠江都荟首层",
    cp: "NavInfo",
    direction: "附近",
    distance: "26",
    name: "linda",
    poiType: "购物",
    point: {
    x: 113.32348581315,
    y: 23.123953700942
    },
    tag: "购物;商铺",
    tel: "",
    uid: "a9a43471eb77089e095cb32f",
    zip: ""
    },
    {
    addr: "广州市越秀区华利路25号之一101号商铺",
    cp: "NavInfo",
    direction: "西",
    distance: "51",
    name: "星展银行(华利路支行)",
    poiType: "金融",
    point: {
    x: 113.32371937258,
    y: 23.123762594973
    },
    tag: "金融;银行",
    tel: "",
    uid: "97e52cb6fe0cfde72902e16c",
    zip: ""
    }
    ],
    poiRegions: [ ],
    sematic_description: "远洋明珠大厦商务楼内0米",
    cityCode: 257
    }
    }



    展开全文
  • 根据经纬度求距离

    2017-01-04 17:04:49
    在做专车功能集成的时候 ,因为测试环境经纬度距离缺少有效数据,故直接拷贝网上例子发现还是有问题的 , 因为参数不对应,生产环境下出的距离过大. 还有因为展示的是公里,所以返回结果需要除1000.public static ...

    在做专车功能集成的时候 ,因为测试环境经纬度距离缺少有效数据,故直接拷贝网上例子发现还是有问题的 ,
    因为参数不对应,生产环境下求出的距离过大.
    还有因为展示的是公里,所以返回结果需要除1000.
    /**
    * 根据经纬度计算距离
    * @param long1 第一点经度
    * @param lat1 第一点纬度
    * @param long2 第二点经度
    * @param lat2 第二点纬度
    * @return 返回距离 单位:米
    */
    `

    public static double queryDistance(double long1, double lat1, double long2, double lat2) { 
    	logger.info("出发地:经度long2="+long2+",纬度lat2:"+lat2+",司机经度:long1="+long1+",纬度:lat1="+lat1);
    	 double a, b, R;  
    	 R = 6378137; // 地球半径  
    	 lat1 = lat1 * Math.PI / 180.0;  
    	 lat2 = lat2 * Math.PI / 180.0;  
    	 a = lat1 - lat2;  
    	 b = (long1 - long2) * Math.PI / 180.0;  
    	 double d;  
    	 double sa2, sb2;  
    	 sa2 = Math.sin(a / 2.0);  
    	 sb2 = Math.sin(b / 2.0);  
    	 d = 2  
    	        * R  
    	        * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)  
                * Math.cos(lat2) * sb2 * sb2));    
    	   return d/1000; 
    }
    

    `

    展开全文
  • sql中利用两点的经纬度求距离

    千次阅读 2018-06-29 10:32:17
    今天的做的一个是取用户工作地到所属于集团的距离,已知道的是用户工作点和集团点的经纬度。先贴经纬度求距离公式。a(JA,WA)和b(JB,WB)点距离公式。 下面是sql语句:6378137*2*ASIN(SQRT(POWER(SIN((a.work_lat-b...
  • 给你n个点的经纬度一个点到其他点的距离的最大值里是最小。具体解释 需要用到经纬度求距离的公式。 当个模板好了。#include #include #include using namespace std; int INF = 0x3f3f3f3f; const double ...
  • 经纬度距离求与正北方向的夹角(方向角),在网上看了好多这样的资料,许多算法感觉都不太对,今天终于找到个计算比较精准的,自己整理了下: 通过此类算法可以灵活计算两点间的距离。 如果制作定位应用 需要另...
  • 传入两点经纬度距离 def calcDistance(Lng_A, Lat_A, Lng_B, Lat_B): """ 根据两个点的经纬度求两点之间的距离,注意需要乘以1000,因为返回的单位为千米 :param Lng_A: :param Lat_A: :param Lng_B: :...
  • 方便网优的小工具,对网络规划计算站距有一定的意义
  • 已知经纬度,可非常方便快捷地出求距离的小软件
  • package com.chx.finddata.JdbcUtils;import com.chx.finddata.domain.Data;import .../** * 已知经纬度计算距离 * @author xh * */public class Distance {public static double GetDistance(D
  • #include <math.h> // 角度转弧度 double rad(double d) { const double PI = 3.1415926535898;...// 传入两个经纬度,计算之间的大致直线距离 int CalcDistance(float fLati1, float fLong1, floa...
  • 在处理GPS数据时,经常会给出两点的距离,来计算两点之间的距离,这个距离大致可看作直线距离,python版本代码如下所示: from math import radians, cos, sin, asin, sqrt def get_distance(lon1, lat1, lon2, ...
  • JS知道两点经纬度求距离

    千次阅读 2016-12-23 09:49:34
    两点经纬度计算距离 var EARTH_RADIUS = 6378137.0; //单位M var PI = Math.PI; function getRad(d){ return d*PI/180.0; } function getFlatternDistance(lat1,lng1,lat2,lng2){
  • MATLAB中根据两点的经纬度求距离

    千次阅读 2020-06-05 11:29:09
    重点是用matlab计算距离得到的单位: %% 初始化参数 clear all; close all; clc; %% 读取两点的坐标 coordinate_a = [39.85929,116.47070]; coordinate_b = [39.04403,121.63660; 26.60968,106.73550; 45.74223...
  • 根据经纬度求距离(算法)

    千次阅读 2019-01-04 11:33:21
    * 两个已知经纬度之间的距离,单位为米 * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 */ function getdistance($lng1, $lat1, $lng2, $lat2) { // 将角度转为狐度 ...
  • java 经纬度求距离

    2013-07-17 15:18:07
     * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米  * @param lng1  * @param lat1  * @param lng2  * @param lat2  * @return  */  public static double GetDistance(double ...
  • sql 根据经纬度求距离

    千次阅读 2015-12-03 12:54:19
    ROUND(ACOS(SIN((ts.latidude * 3.1415) / 180 ) * SIN(('28.200082' * 3.1415) / 180 ) +COS((ts.latidude * 3.1415) / 180 ) * COS(('28.200082' * 3.1415) / 180 ) *COS((ts.longitude *
  • GPS经纬度求距离

    千次阅读 2011-10-21 01:45:42
    1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度; 2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差; 3.6378.137为地球半径,单位为公里; 计算出来的结果单位为公里。   ====...
  • *两个已知经纬度之间的距离,单位为米 *@param lng1,lng2 经度 *@param lat1,lat2 纬度 *@return float 距离,单位米 *@author www.Alixixi.com **/ function getdistance($lng1,$lat1,$lng2,$lat2){ //将角度转为...
  • 所以,如果已知A点的经纬度(a,b),想要求出距离该点范围为500米的点, 可以写成 where a.lgt_nbr>=sum(a,-500/111000) and a.lgt_nbr<=sum(a,500/111000) and a.lat_nbr>=sum(...
  • 我们在做定位的时候,App端获取到定位,经度和维度都是Double,获取附近的人,就要根据用户经纬度求出附近的人的距离,并按降序排序。以一个user表为例 表的结构如下CREATE TABLE `user` ( `id` int(11) NOT NULL ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,574
精华内容 8,629
关键字:

经纬度求距离