在网上找到了此代码。
我插入了图片的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);*/
}
}
答案 0 :(得分:0)
代码中的数学没问题。简单的测试表明,正确的宽度像素已计算出:
latitude = 30.0; //
longitude = -180; // --> 0
longitude = 0; // --> 716
longitude = 180; // --> 1433
m.getXYfromLatLon(latitude, longitude);
所以问题是地图(即图像文件的内容)不正确。在飞机上投影地球仪并不容易...