像素结果略有偏差

时间:2018-12-20 10:04:25

标签: java coordinates pixel

在网上找到了此代码。
我插入了图片的width和height属性,但是由于某种原因,宽度结果(以像素为单位)略有偏差。
对于坐标(35.207887,32.104750),运行代码后得到的像素为844x171。
 因此,我得出结论,偏差是图片的宽度参数(高度可以忽略不计,因为看起来差异范围仅为2个像素)。 但是使用ms paint应用程序。实际结果应为795x169 但是高度似乎很好。 我想直接指向代码中发生偏差的特定点

package gis;
import java.awt.Point;

public class Map {

/**
 * width and height are the map bounds in pixels
 */

final int width=1433;
final int height=642;

public void getXYfromLatLon(double latitude, double longitude) {
    // get x value
    int mapWidth = 1433, mapHeight = 642;
    int pX = (int)((longitude+180.)*(mapWidth/360.));

    // convert from degrees to radians
    double latRad = latitude*Math.PI/180.;

    // get y value
    double mercN = Math.log(Math.tan((Math.PI/4.)+(latRad/2.)));
    int pY = (int)((mapHeight/2.)-(mapWidth*mercN/(2.*Math.PI)));
    String str="x = "+pX+", y = "+pY;
    System.out.println(str);
    //System.out.println("x = "+pX+", y = "+pY);
}



public static void main(String[] args) {
    /////////
    Map m=new Map();

    double latitude    = 35.207895; 
    double longitude   = 32.104740;   
    m.getXYfromLatLon(latitude, longitude);
//  getXYfromLatLon(latitude, longitude);

    /*latitude    = 30.0; // (ֿ†)
    longitude   = 34.0;   // (־»)
    getXYfromLatLon(latitude, longitude);*/
}


 }

1 个答案:

答案 0 :(得分:0)

代码中的数学没问题。简单的测试表明,正确的宽度像素已计算出:

    latitude = 30.0; //
    longitude = -180; // --> 0 
    longitude = 0; // --> 716 
    longitude = 180; // --> 1433 
    m.getXYfromLatLon(latitude, longitude);

所以问题是地图(即图像文件的内容)不正确。在飞机上投影地球仪并不容易...