0

我想在 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 组件可能有不同的方式,这种方式更舒适,而且没有这些“低级”步骤......

谢谢你的帮助。一个例子会很有帮助......

4

0 回答 0