当前位置: 首页 > 知识库问答 >
问题:

Java程序如何计算地球上两点之间的距离?

仰雅昶
2023-03-14

我知道如何开始,也知道如何安装扫描仪和其他东西,但是在学校里,我从来没有真正学习过经纬度公式,以及如何将这些点转换成弧度。所以我几乎被困在这个Java问题上。这是我目前掌握的情况:

import java.util.*;

class DistanceCalculator {

    // Radius of the earth in km; this is the class constant.
    public static final double Radius = 6372.795; 

    /**
     * This program computes the spherical distance between two points on the surface of the Earth.
     */

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        intro();

        System.out.print("Longitude (degrees.minutes) ");
        double Longitude = console.nextDouble();
        System.out.print("Latitude (degrees.minutes) ");
        double Latitude = console.nextDouble(); 
    }

    public static double distFrom(double lat1, double lng1, double lat2, double lng2); 
        double Latitude = Math.toRadians(...);  
    }

    public static void intro() {
        System.out.println("This program computes the spherical distance between two points on the surface of the Earth.");
        System.out.println("\tPlease start by entering the longitude and the latitude of location 1.");
    }
}

在JavaIDE中,他们说经度和纬度点(位于intro()下面) )没有被使用,我知道为什么,因为我还没有真正定义它们。我知道我错过了经度和纬度的公式。在我的书中,它希望我使用球面余弦定律,因为我在学校从来没有学过这一点,无论我多么努力地从我找到的网站上学习这个公式,我都不知道如何将其转换成Java语言
另一个问题是,如何将经度/纬度点的度数和分钟转换为弧度?我必须使用数学吗。toRadians什么?哦,是的,还有,我的答案必须是公里。

更新:你们中的一些人谈论的数学函数让我非常困惑。在学校(我是一名高中生),即使是在数学IB SL,我的老师也从未教过我们如何找到长/宽点。。。然而所以我很难理解。既然球面余弦定律公式是在线的,我基本上就是把这个公式转换成“java语言”并插入我的程序吗?


共有3个答案

党浩阔
2023-03-14

您可以查看此链接以了解逻辑。

http://aravindtrue.wordpress.com/2009/06/30/calculate-distance-using-latitude-and-longitude-php-mysql/

PHP中的函数...我不知道Java。所以有人编辑了我的帖子。这是PHP函数:

function getDistanceBetweenPointsNew($latitude1, $longitude1,
$latitude2, $longitude2, $unit = 'Mi')
{
    $theta = $longitude1 - $longitude2;
    $distance = (sin(deg2rad($latitude1)) *
    sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) *
    cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
    $distance = acos($distance);
    $distance = rad2deg($distance);
    $distance = $distance * 60 * 1.1515;
    switch($unit)
    {
        case 'Mi': break;
        case 'Km' : $distance = $distance *1.609344;
    }
    return (round($distance,2));
}

还要从MySQL数据库中获取价值:

计算距离给定2点,经纬度

我试图创建一个java函数,我不知道它是否有效。

试试这个。如果有人能帮忙,试着编辑我的java代码。

import java.math.BigDecimal;

public static double round(double unrounded, int precision, int roundingMode)
{
    BigDecimal bd = new BigDecimal(unrounded);
    BigDecimal rounded = bd.setScale(precision, roundingMode);
    return rounded.doubleValue();
}

public static double distFrom(double lat1, double lng1, double lat2, double lng2, String unit)
{
    double theta = lng1 - lng2;

    double distance = (
        Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2))
     )+(
        Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(theta))
     );
    distance = Math.acos(distance);
    distance = Math.toDeg(distance);
    distance = distance * 60 * 1.1515;

    switch(unit)
    {
        /* Mi = miles, Km = Kilometers */
        case "Mi"   : 
            break;
        case "Km"   : 
            distance = distance *1.609344;
            break;
    }
    distance = round(distance, 2, BigDecimal.ROUND_HALF_UP);
    return distance;
}
羊舌承
2023-03-14

我建议阅读更多关于WGS84的内容。

这里有数学解释。

申屠俊发
2023-03-14

你需要搜索的关键词是“哈弗辛公式”。

一种更容易理解的方法,但对于小距离来说并不十分准确,就是回忆两个向量AB之间的角度可以使用点积计算:

A.⋅ B=|A |*|B |*cos(θ)

因此,如果你将极坐标对转换为三维笛卡尔坐标(是的,你需要使用Math.toRadians()Math)。cos()数学。sin()要做到这一点,然后计算点积,你会得到cos(θ),所以使用数学。acos()获取theta

然后,您可以简单地计算距离为D=R*θ,其中R是地球的半径,而θ保持弧度。

 类似资料:
  • 问题内容: 我需要创建一个类来计算两点之间的距离。我被困住了,我是一个完全的初学者。这是我的课程: 第二课。 我不确定如何在两个定义的点之间获取点对象(中间点)。 我可以创建点对象,但不确定如何通过位于这两个点对象之间的方法返回点对象。 问题答案: 平面上的两个点(x1,y1)和(x2,y2)之间的距离为: 但是,如果您想要的只是两个点的中点,则应将中点函数更改为: 这将返回一个全新的点对象,其点

  • 本文向大家介绍php如何计算两坐标点之间的距离,包括了php如何计算两坐标点之间的距离的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php计算两坐标点之间距离的实现代码,供大家参考,具体内容如下 地球上两个点之间,可近可远。 当比较近的时候,可以忽略球面因素,当做是一个平面,这样就有了两种计算方法。 小编再为大家分享一段php坐标之间距离的求解代码: 以上就是本文的全部内容,希望对

  • 问题内容: 我从互联网上的某个地方借用了以下方法(不记得在哪里)。但是它做的很简单,找到了两个gps点之间的距离。它工作得很好,除了它可能有点慢之外,因为我正在数百万个点上运行它。我想知道是否有人知道这种方法在计算上会更便宜。 准确度必须在“正确”的一般范围内,但不必是100%准确。 附言:我确实确实发现了许多其他相关问题,但是它们并没有真正关注我的速度问题。 问题答案: 如果您不介意忽略地球的微

  • 问题内容: 这是我的尝试,这只是我的代码的一部分: 我正在使用以下公式来获取经度和纬度: 问题答案: 上面Dommer给出的Java代码给出的结果略有不正确,但是如果你正在处理GPS轨迹,则小错误加起来。这是Java中Haversine方法的实现,该方法还考虑了两点之间的高度差。

  • 我试图使用Scala类计算两点之间的距离。但它给出了一个错误说 类型不匹配;发现:其他。需要类型(具有基础类型点):?{def x:?}请注意,隐式转换不适用,因为它们是不明确的:在[A](x:A)类型的对象Predef中确保[A]的方法any2Ensuring和在[A](x:A)“ArroAssoc[A]类型的对象Predef中的方法Ani2ArrowasSoc都是可能的其他转换函数。输入到?{

  • 问题内容: 您如何计算Google Maps V3中两个标记之间的距离?(类似于inV2中的功能。) 谢谢.. 问题答案: 如果要自己计算,可以使用Haversine公式: