`
碧血剑
  • 浏览: 217466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

经度/纬度计算两点间的距离

阅读更多
环境:struts+hibernate,有一个article(文章类)类,文章中有三个字段、进度、纬度、距离(其中距离在是求出来的).
目标是:1.查询出最新发布的1000个文章。
2.根据经度纬度求出article中的距离。
3.在根据距离排序.
问题是:1000条记录存在临时表中,还是存在像Hashtable的列表中,之后再对1000条记录当中的每个article修改,求出距离根据经度和纬度。
考虑到效率问题,或者有其他什么好方法没有?可以存储1000条记录,进行我想的操作。
或者有其他好方法,希望顶一下。

 

解决方法:

1.查询出1000条记录,新的记录。

2.之后计算出经度/纬度之间的距离。存放在临时表中。

3.排序,加分页

计算两点间经度/纬度的距离公式如

java 代码

package com.hipengyou.apply.util;
/**
 * 关于地图类
 * @author
 *
 */
public class GoogleMap {
 private static final double EARTH_RADIUS = 6378.137;
 private static double rad(double d)
 {
    return d * Math.PI / 180.0;
 }
/**
 * 计算两点间距离(关于经度/纬度)
 * @param lat1
 * @param lng1
 * @param lat2
 * @param lng2
 * @return
 */
 public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
 {
    double radLat1 = rad(lat1);
    double radLat2 = rad(lat2);
    double a = radLat1 - radLat2;
    double b = rad(lng1) - rad(lng2);
    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;
 }
 public static double D_jw(double wd1,double jd1,double wd2,double jd2)
 {
     double x,y,out;
     double PI=3.14159265;
     double R=6.371229*1e6;

     x=(jd2-jd1)*PI*R*Math.cos( ((wd1+wd2)/2) *PI/180)/180;
     y=(wd2-wd1)*PI*R/180;
     out=Math.hypot(x,y);
     return out/1000;
 }

public static void main(String args[]){
  System.out.println(GoogleMap.D_jw(39.89945,116.40969,39.14307,117.20010));
 }
}

 

js代码

 

private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
   return d * Math.PI / 180.0;
}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
   double radLat1 = rad(lat1);
   double radLat2 = rad(lat2);
   double a = radLat1 - radLat2;
   double b = rad(lng1) - rad(lng2);
   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;
}

非常感谢,帮了我大忙了:)
虽然我也没看明白到底原理是什么,但验算了A(60,30),B(60,90)两点之间,此段代码和我用余弦定理算出来的结果很一致。
余弦定理的步骤是:1、算A、B弦长:地球半径R*cos(经度差60)=R/2;
2、算角AOB,O为地球圆心,利用余弦定理,
cosAOB=(2R*R-(R/2)^2) /2*R*R=7/8;
3、弧AB的长为:R*arc cos(7/8);求毕 

 

以下地址是www.51ditu.com上计算l两个间经度纬度的距离地址

http://api.51ditu.com/docs/mapsapi/examples/LTFunction/getPointsDistance.htm

分享到:
评论

相关推荐

    通过两个经度,纬度计算两点之间距离

    ### 通过两个经纬度计算两点间距离的知识点详解 #### 一、背景介绍 在地理信息系统(GIS)、导航系统及地图应用等领域中,经常需要计算地球上任意两点之间的距离。这不仅可以帮助我们理解地理位置间的实际距离,还...

    计算两点间距离,点与线段距离,三个点的夹角

    在给定的代码片段中,计算两点间距离主要应用于GPS坐标系统中的经度和纬度计算。该算法采用了球面三角学原理来计算地球上任意两点之间的最短距离(大圆距离)。其核心思想是利用球面余弦定理来计算两点间的角度差,...

    java根据两点经纬度计算距离

    其中,`φ1` 和 `φ2` 是两点的纬度,`Δφ` 是它们纬度差,`Δλ` 是经度差,`R` 是地球半径,大约为6371公里或3959英里。 3. Java实现:在Java中,你可以创建一个函数来实现Haversine公式。首先,将经纬度从十进...

    Android-依据两点间经纬度坐标,计算两点间距离

    此方法首先将经纬度转换为弧度值,然后计算两点间纬度差与经度差的弧度值,接着应用Haversine公式计算出两点间的大圆距离,最后将结果乘以地球平均半径并四舍五入返回最终的距离。 #### 方法二:使用另一种实现方式...

    电子-根据两点经纬度计算距离.doc

    在计算两点之间的距离时,我们需要知道两点的经度和纬度。然后,我们可以使用三角函数来计算两点之间的距离。三角函数可以用来计算三角形的边长和角度。在地球坐标系中,我们可以使用三角函数来计算两点之间的距离。...

    百度地图计算2点间距离

    ### 百度地图计算两点间距离 #### 概述 在地理信息系统(GIS)和位置服务应用中,计算两点间的距离是一项基本而重要的功能。本文将详细介绍如何利用百度地图提供的经纬度信息,通过Java编程语言实现计算两点间短...

    WGS84坐标下根据经纬度计算两点之间的距离

    ### WGS84坐标系下计算两点间距离的知识点 #### 一、WGS84坐标系简介 WGS84(World Geodetic System 1984)是一种广泛应用于全球定位系统(GPS)中的地球参考框架。该坐标系采用了一个理想的地球模型——地球椭...

    68.(cesium篇)cesium获取两点(有高度差)之间的距离.zip

    计算两点之间的距离,通常我们使用的是二维平面上的欧几里得距离。但在Cesium中,由于考虑了地球的曲率以及高度差,我们需要使用球面距离或者称为大圆距离来计算。对于具有高度差的两点,我们需要考虑地球的椭球体...

    计算两个经纬度之间的距离Java

    在实际应用中,如果需要在地图上显示两点间的距离,可以结合高德地图JavaScript API或者Android SDK,将计算出的距离作为参数,绘制路径或标注。但在这个例子中,描述中提到的“通过高德地图测试通过”可能意味着...

    已知两点经纬度,求距离和方位

    计算两点之间的距离,我们可以使用Haversine公式。Haversine公式基于球面三角学,用于计算地球上两点之间的大圆距离。公式如下: \[ a = \sin^2\left(\frac{\Delta \phi}{2}\right) + \cos(\phi_1) \cdot \cos(\phi...

    利用经纬度计算两点之间的距离

    为了精确计算两点间的距离,我们需要考虑地球的曲率。国际上通常采用WGS84(World Geodetic System 1984)坐标系统,这是一种全球统一的参考框架,用于定位地表的任何位置。 计算两点间距离最基础的方法是Haversine...

    计算地面表面两点之间的距离

    这两种方法虽然表现形式不同,但实质上都是为了计算出地球上两点间的最短距离,即大圆距离。在实践中,尤其是GPS和导航系统中,Haversine公式更为常用,因为它可以直接处理经纬度数据,而且在Excel或其他计算工具中...

    php计算地图上两点间的距离的类.zip

    在计算两点间距离时,通常我们会用到球面三角学,其中Haversine公式是一个常用的方法。 Haversine公式是用来计算地球上两点间大圆距离的数学公式,它考虑了地球的曲率。公式如下: ``` a = sin²(Δφ/2) + cos φ...

    已知两点经纬度求算两点间距离

    程序可以直接下载使用; 可以根据经纬度坐标求算两点间距离; 计算结果准确无误且精确度高

    Java版_经纬度两点间距离计算(LngLat)

    ### Java版_经纬度两点间距离计算(LngLat) #### 概述 本文将详细介绍一个用Java实现的计算两个地理位置(通过经纬度表示)之间距离的方法。该方法基于Haversine公式,这是一种广泛用于导航领域中的算法,可以精确...

    两点经纬度计算距离.xlsx

    已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。

    matlab开发-两点之间的距离

    GPS坐标通常是经纬度的形式,而卡尔森模型(Carlson's formula)是一种用于在球面上计算两点间距离的方法,它适用于地球或其他类似球体的表面。在硬件接口和物联网领域,这种计算能力对于定位、导航系统以及相关数据...

    计算两点的精确距离

    在地理信息系统(GIS)领域,计算两点间的精确距离是一项基础而重要的操作。特别是在地震分析中,需要根据震中与观测点的经纬度来精确计算出地震波的传播距离。本文详细介绍了计算地球上两点间距离的几种方法,其中...

    gps两点经纬度计算距离和方向角

    通过两点经纬度坐标,得到两点的距离和角度。进行高斯转化。

    根据经纬度坐标计算实际两点距离

    ### 根据经纬度坐标计算实际两点距离 在地理信息系统(GIS)开发中,经常需要进行经纬度坐标之间的距离计算。此类计算对于导航系统、地图应用等有着重要的应用价值。本篇文章将详细介绍如何通过C/C++语言实现基于...

Global site tag (gtag.js) - Google Analytics