java - 在 JMapViewer 中绘制折线

标签 java swing openstreetmap jmapviewer

我正在使用 Java 中的 OpenStreetMap 和 JMapViewer。 我可以使用JMapViewer绘制多边形和矩形,但是如何绘制折线?

谢谢。

最佳答案

您可以创建自己的折线实现。下面是基于现有 MapPolygonImpl 的示例。这很hacky,但是JMapViewer中似乎没有方法来添加行。

enter image description here

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Path2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;
import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;

public class TestMap {

    public static class MapPolyLine extends MapPolygonImpl {
        public MapPolyLine(List<? extends ICoordinate> points) {
            super(null, null, points);
        }

        @Override
        public void paint(Graphics g, List<Point> points) {
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(getColor());
            g2d.setStroke(getStroke());
            Path2D path = buildPath(points);
            g2d.draw(path);
            g2d.dispose();
        }

        private Path2D buildPath(List<Point> points) {
            Path2D path = new Path2D.Double();
            if (points != null && points.size() > 0) {
                Point firstPoint = points.get(0);
                path.moveTo(firstPoint.getX(), firstPoint.getY());
                for (Point p : points) {
                    path.lineTo(p.getX(), p.getY());    
                }
            } 
            return path;
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("Demo");
        JMapViewer viewer = new JMapViewer();

        List<Coordinate> coordinates = new ArrayList<Coordinate>();
        coordinates.add(new Coordinate(50, 10));
        coordinates.add(new Coordinate(52, 15));
        coordinates.add(new Coordinate(55, 15));

        MapPolyLine polyLine = new MapPolyLine(coordinates);
        viewer.addMapPolygon(polyLine);

        frame.add(viewer);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }
}

关于java - 在 JMapViewer 中绘制折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252592/

相关文章:

postgresql - 加载 map 图层时出错 'default' : Shape Plugin: shapefile 'true.shp' does not exist

java - 使用维基百科数据时如何提高性能?网页?

javascript - 如何通过使用 javascript 检查 mysql 数据库中是否存在该值来从选择下拉框中删除选项

java - 使用Java远程备份MySQL数据库

java - JTextArea写入时出现问题。 JFrame 中的文本不受限制

php - 使用 Php 从 .osm XML 文件中提取数据

android - 使用 OSM 的公共(public)交通路线

java - GridLayout 中的按钮对齐方式

java - 如何在不更改外观的情况下为多个 JProgressBar 独立设置 JProgressBar 文本颜色

java - 更改 Java 应用程序的桌面图标