Небольшое отклонение в результате пикселей - PullRequest
0 голосов
/ 20 декабря 2018

Найден этот код в Интернете.
Я вставляю свои свойства ширины и высоты изображения, но по какой-то причине я получаю небольшое отклонение по ширине, полученное в пикселях.
Для координат (35.207887,32.104750) Iя получаю результат 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 голосов
/ 20 декабря 2018

Математика в коде в порядке.Простые тесты показывают, что вычисляется правильный пиксель ширины:

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

Таким образом, проблема в том, что карта (то есть содержимое файла вашего изображения) не является точной.Нелегко проецировать глобус на самолет ...

...