2016-03-07 4 views
0

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

общественной точки getXY (двойной долгота, широта Double) {

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); 
} 

ответ

0

Я думаю, если у вас есть уравнения, реализация прямо вперед. Однако для таких операций полезно использовать Geotools, java-библиотеку с открытым исходным кодом, которая предоставляет такие функции GIS. Вот учебник, показывающий, как вы можете преобразовать между различными координатных систем отсчета: geotools CRS tutorial
Вот учебник, который showes вам, как иметь дело с изображением и CRS-координаты:
Geotools Affine transformation

0

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

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

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

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

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