Меракторная проекция для преобразования долготы и широты в координаты x и y

Я искал преобразование долготы и широты и нашел этот алгоритм, который я сейчас использую, и не уверен, что это правильный алгоритм. Также, как мне нарисовать конкретные координаты на картинке карты с помощью всплывающей подсказки. Я попытался переопределить метод paintComponent внутри JPanel, но мне нужно, чтобы изображение тега было меткой, чтобы я мог правильно использовать JTooltip. Ниже приведен алгоритм, который я сейчас использую. Пожалуйста, дайте мне знать, если это правильно, а также как разместить другое изображение в верхней части основного изображения. как и при использовании JLabel, я использовал метод setBounds, чтобы установить местоположение, но не выполнял работу должным образом, учитывая список точек для размещения.

public Point getXY (Двойная долгота, Двойная широта) {

    List<Integer> list = new ArrayList<Integer>();
    double mapWidth = 2000; 
    double mapHeight = 1000;
    // get x value
    double x = (longitude + 180) * (mapWidth / 360);
    int x1 = (int) Math.round(x);
    list.add(x1);
    // 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)));
    double y = (mapHeight / 2) - (mapWidth * mercN / (2 * Math.PI));
    int y1 = (int) Math.round(y);
    list.add(y1);
    return new Point(x1, y1);
} 

2 ответа

Любое преобразование из широты / долготы в XY называется "проекцией", и есть много разных. Не существует "правильной" проекции, потому что любое отображение из сферы или эллипсоида (Земля немного уплощена, а не идеальная сфера) в плоскость будет влечь за собой некоторое искажение.

Вы не говорите, какую проекцию вы используете здесь. Вы должны, даже если это просто базовый, чтобы каждый, кто читает код в будущем, знал, откуда вы взяли ваши уравнения, и мог проверить их на правильность. Кроме того, мы не можем сказать вам, правильно ли вы поняли это, не имея понятия о том, что означает "право" в этом случае.

Вы пробовали некоторые тестовые данные? Если вы приблизительно знаете, какие результаты ожидаете, например, если у вас есть бумажная карта, в которой используется та же проекция, то вы можете проверить свой алгоритм, указав значение долготы для определенного ориентира и проверив, соответствует ли результат XY положению карты., Есть также несколько веб-сайтов, которые могут предоставить точные конверсии для конкретных прогнозов, если это то, что вам нужно.

Правильная проекция во многом зависит от того, что вы хотите сделать. Звучит так, будто вы просто хотите узнаваемый рендеринг небольшой географической области (например, штата США или европейской страны). Если так, то в значительной степени подойдет любая проекция.

Если вы хотите что-то точное, чтобы вы могли измерить расстояния или углы на карте или выполнить навигацию в пределах мили на большие расстояния, тогда жизнь очень быстро усложняется, и если вы можете использовать уже существующую библиотеку, то это очень хорошая идея. Но я не думаю, что это то, что вам нужно здесь.

Я думаю, если у вас есть уравнения, реализация прямолинейна. Тем не менее, для таких операций хорошо использовать Geotools, java-библиотеку с открытым исходным кодом, которая предоставляет такие функции ГИС. Вот учебник, показывающий, как вы можете преобразовать различные системы координат: учебник по геотрум CRS
Вот учебник, который показывает, как работать с изображением и CRS-координатами:
Geotools Аффинное преобразование

Другие вопросы по тегам