java - J2ME - 计算2个纬度和经度之间的距离

标签 java java-me

这个问题和这个很相似one .思路是在J2ME中计算2个经纬度点之间的距离。

我见过很多使用 Math.atan2 的示例,它在 Java 中很好,但在 JavaME 中不存在。

关于具体解决方案或 Math.atan2 替代方案的任何想法?

最佳答案

atan2 似乎有一个解决方案 here .

我重构了 atan2 的代码:

class TrigMath {

    static final double sq2p1 = 2.414213562373095048802e0;
    static final double sq2m1 = .414213562373095048802e0;
    static final double p4 = .161536412982230228262e2;
    static final double p3 = .26842548195503973794141e3;
    static final double p2 = .11530293515404850115428136e4;
    static final double p1 = .178040631643319697105464587e4;
    static final double p0 = .89678597403663861959987488e3;
    static final double q4 = .5895697050844462222791e2;
    static final double q3 = .536265374031215315104235e3;
    static final double q2 = .16667838148816337184521798e4;
    static final double q1 = .207933497444540981287275926e4;
    static final double q0 = .89678597403663861962481162e3;
    static final double PIO2 = 1.5707963267948966135E0;

    private static double mxatan(double arg) {
        double argsq = arg * arg, value;
        value = ((((p4 * argsq + p3) * argsq + p2) * argsq + p1) * argsq + p0);
        value = value / (((((argsq+q4)*argsq+q3)*argsq+q2)*argsq+q1)*argsq+q0);
        return value * arg;
    }

    private static double msatan(double arg) {
        return arg < sq2m1 ? mxatan(arg)
             : arg > sq2p1 ? PIO2 - mxatan(1 / arg)
             : PIO2 / 2 + mxatan((arg - 1) / (arg + 1));
    }

    public static double atan(double arg) {
        return arg > 0 ? msatan(arg) : -msatan(-arg);
    }

    public static double atan2(double arg1, double arg2) {
        if (arg1 + arg2 == arg1)
            return arg1 >= 0 ? PIO2 : -PIO2;
        arg1 = atan(arg1 / arg2);
        return arg2 < 0 ? arg1 <= 0 ? arg1 + Math.PI : arg1 - Math.PI : arg1;
    }
}

关于java - J2ME - 计算2个纬度和经度之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454630/

相关文章:

java - 在 LWUIT 组件上绘制 javax.microedition.lcdui.Graphics

java - J2ME 的编码准则是什么?

java - 将 LibGDX 添加到现有 Gradle Java 项目

java - 如何将堆栈跟踪发送到 log4j?

java - 如何将 txt 文件从精确格式的 url 解析为 TextView ?

java - 读取重复事件时出现问题

java - Android:下载 .html 并将其转换为 String

java - 同步块(synchronized block)中的字符串不可变性和等待方法

java-me - 适用于 MIPS 的 CDC for Oracle Java ME 嵌入式客户端资源

java - 使用 j2me 将捕获的图像保存到 sd 卡中