有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Mollweide投影中获取我的世界地图中一个点的经度

我搜索了大约一天,但在Java代码中没有找到任何解决我问题的例子

我有一张2000*1400像素的世界地图,带有“Mollweide”投影。 我怎样才能知道我地图上的点(500300)的经度和纬度是多少? 我想用Java编写代码

我试着用“Java地图投影库”来实现这一点:

Point2D.Double pointonmap = null;
Point2D.Double latlon = null;
MolleweideProjection molproj=new MolleweideProjection();

pointonmap = new Point2D.Double (1400,1000);  

latlon=molproj.inverseTransform(pointonmap,new Point2D.Double ());

System.out.println("latlon: " + latlon.getX() + ", " + latlon.getY());

有人能帮我吗?代码示例或提示

谢谢和问候


共 (1) 个答案

  1. # 1 楼答案

    这个答案使用了Mollweide projection上英文维基百科条目中的信息。我已经逐字逐句地抄写了其中的公式

    简短的回答,这样你就可以编写自己的代码了:

    获取地图的半径,r:
    投影宽度/(2*√2)

    获取θ,点在地图上的角度:
    反正弦(y/(r*√2) )

    注:反正弦是正弦的倒数。使用数学。java中的asin(a)

    获取纬度:
    反正弦((2*θ+正弦(2*θ))/PI)

    获取经度:
    PI*x/(2*R*√2*余弦(θ))+中央子午线

    或者你可以复制这个
    效率不高;x和y是双倍的,因为太懒了,不能写排版,所以要避免缩小范围
    没有二传手没有接球手所有球员都是公开的
    全世界都喜欢布朗纳博士的电视晚餐为你解决问题
    和其他东西
    伊诺伊

    public class MolleweidePoint
    {
        public double x, y, latitude, longitude;
    
        public MolleweidePoint(double projectionWidth, double x, double y)
        {
            double rootTwo = Math.sqrt(2);
            double r = projectionWidth / 2 / rootTwo;
            double theta = Math.asin(y / r / rootTwo);
    
            this.x = x;
            this.y = y;
            longitude = Math.PI * x / 2 / r / rootTwo / Math.cos(theta);
            latitude = Math.asin(2 * theta + Math.sin(2 * theta) / Math.PI);
        }
    }
    

    在调用构造函数之后

    MolleweidePoint ted = new MolleweidePoint(projection.width, 300, 500)
    

    你可以从ted.longitudeted.latitude得到纬度和经度。此外,经度可能必须根据中央子午线在投影上的位置进行调整