You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JMapViewer中绘制地质断层/穹窿线遇依赖问题,求解决方案

JMapViewer绘制地质断层/穹窿线完整解决方案

1. 获取完整JMapViewer源码

不要使用第三方jar下载站的精简包,直接获取官方完整源码,确保包含MapPolygonImpl等核心实现类。

2. NetBeans导入多文件夹源码步骤

  • 打开NetBeans,创建新的Java Application项目
  • 右键项目 → 新建 → 文件夹,按照源码的包结构(如org.openstreetmap.gui.jmapviewer)创建对应层级的包文件夹
  • 将下载的源码文件(.java)逐一复制到对应包路径下
  • 右键项目 → 属性 → 库,移除之前添加的精简版JMapViewer jar,避免类冲突

3. 绘制地质线的两种实现方式

方式一:使用官方MapPolygonImpl类

完整源码包含该类,可直接复用旧问题的逻辑,适用于折线或闭合穹窿线:

// 构造地质线的经纬度点集合
List<GeoPoint> faultPoints = new ArrayList<>();
// 添加实际地质点的经纬度
faultPoints.add(new GeoPoint(39.9042, 116.4074));
faultPoints.add(new GeoPoint(39.9152, 116.4274));
faultPoints.add(new GeoPoint(39.9082, 116.4354));

// 创建地质线对象并设置样式
MapPolygonImpl faultLine = new MapPolygonImpl(faultPoints);
faultLine.setColor(Color.RED);
faultLine.setStroke(new BasicStroke(2f)); // 设置线宽

// 添加到地图控件
JMapViewer map = new JMapViewer();
map.addMapPolygon(faultLine);

方式二:自定义Overlay绘制(不依赖MapPolygonImpl)

如果需要更灵活的样式控制,可自定义MapOverlay实现绘制:

public class GeoLineOverlay extends MapOverlay {
    private List<GeoPoint> geoPoints;
    private Color lineColor;
    private float lineWidth;
    private boolean isClosed; // 是否为闭合穹窿线

    public GeoLineOverlay(List<GeoPoint> points, Color color, float width, boolean closed) {
        this.geoPoints = points;
        this.lineColor = color;
        this.lineWidth = width;
        this.isClosed = closed;
    }

    @Override
    public void paint(Graphics g, JMapViewer map, int width, int height) {
        super.paint(g, map, width, height);
        Graphics2D g2d = (Graphics2D) g.create();

        // 将经纬度点转换为屏幕坐标
        Point[] screenPoints = new Point[geoPoints.size()];
        for (int i = 0; i < geoPoints.size(); i++) {
            screenPoints[i] = map.getMapPosition(geoPoints.get(i));
        }

        // 设置绘制样式
        g2d.setColor(lineColor);
        g2d.setStroke(new BasicStroke(lineWidth));

        // 绘制:闭合线用drawPolygon,非闭合用drawPolyline
        if (isClosed) {
            g2d.drawPolygon(screenPoints);
        } else {
            g2d.drawPolyline(screenPoints, 0, screenPoints.length);
        }

        g2d.dispose();
    }
}

// 使用示例:绘制闭合穹窿线
List<GeoPoint> domePoints = new ArrayList<>();
domePoints.add(new GeoPoint(30.2672, 120.1551));
domePoints.add(new GeoPoint(30.2772, 120.1651));
domePoints.add(new GeoPoint(30.2692, 120.1751));
domePoints.add(new GeoPoint(30.2672, 120.1551)); // 闭合点

GeoLineOverlay domeOverlay = new GeoLineOverlay(domePoints, Color.BLUE, 3f, true);
JMapViewer map = new JMapViewer();
map.addMapOverlay(domeOverlay);

内容的提问来源于stack exchange,提问作者Ennui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:10:02