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, более удобный и без этих "низкоуровневых" шагов...
Спасибо за вашу помощь. Пример будет полезен...