我想在 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 组件可能有不同的方式,这种方式更舒适,而且没有这些“低级”步骤......
谢谢你的帮助。一个例子会很有帮助......