JMapViewer, загрузить растр в позицию

Я хотел бы загрузить и отобразить растровый файл поверх карты в JMapViewer. Растровый файл:

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

Я надеюсь, что эти операции поддерживаются JMapViewer.

В настоящее время я использую класс, производный от MapMarkerCircle:

public class ImageViewer extends MapMarkerCircle implements MapMarker {

   private BufferedImage img;
   public ImageViewer(Coordinate position, BufferedImage img) { this(position, 1, img);}

   public ImageViewer(Coordinate position, double radius, BufferedImage img) {
       super(position, radius);
       this.img = img;
   }

   public void paint(Graphics g, Point position, int sc) {
       int w = (int) (img.getWidth() * sc);
       int h = (int) (img.getHeight() * sc);
       g.drawImage(this.img, position.x - w/2;, position.y - h/2, w, h, null);
   }
 }

Изображение добавляется как новая отметка на карте:

List<MapMarker> ml = new ArrayList<>();
ml.add(new RasterRenderer(new Coordinate(0, 0), img));
this.setMapMarkerList(ml);

Обновленный вопрос:

К сожалению, эта реализация предоставляет шкалу sc в виде целочисленного значения.

public void paint(Graphics g, Point position, int sc) {

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

Левый рисунок изображает Флориду в масштабе sc = 12, который находится внутри растра (справа от границы).

К сожалению, при уровне масштабирования sc = 183, Флорида находится за пределами растра (слева от границы)...

Та же проблема появляется и в северо-западном направлении...

Такое поведение странно, поскольку растровые данные с географической привязкой не могут использоваться из-за сдвигов при разных уровнях масштабирования.

Я попытался переопределить интерфейс MapMarker из

public interface MapMarker extends MapObject, ICoordinate {

   void paint(Graphics g, Point position, int radius);

вернуть значение шкалы как двойное

   void paint(Graphics g, Point position, double radius);

К сожалению, радиус представлен двойным, но без десятичных разрядов:

12  -> 12.0
183 -> 183.0
etc.

Может быть другой способ загрузки растрового файла в компонент JMapViewer, более удобный и без этих "низкоуровневых" шагов...

Спасибо за вашу помощь. Пример будет полезен...

0 ответов

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