首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getGpxTrack()绘制JXMapKit路线

使用getGpxTrack()绘制JXMapKit路线
EN

Stack Overflow用户
提问于 2012-12-30 00:04:21
回答 1查看 1.9K关注 0票数 1

我正在尝试使用下面的源代码在道路上绘制一条路线:

代码语言:javascript
复制
final List<GeoPosition> region = new ArrayList<GeoPosition>();

Painter<JXMapViewer> lineOverlay = new Painter<JXMapViewer>() {

public void paint(Graphics2D g, JXMapViewer map, int w, int h) {
  region.add(new GeoPosition(5.42031,100.34389));
  region.add(new GeoPosition(5.41984,100.33924));
  region.add(new GeoPosition(5.42300,100.33456));


  g = (Graphics2D) g.create();
  //convert from viewport to world bitmap
  Rectangle rect = jXMapKit1.getMainMap().getViewportBounds();
  g.translate(-rect.x, -rect.y);

  //do the drawing
  g.setColor(Color.RED);
  g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  g.setStroke(new BasicStroke(2));

  int lastX = -1;
  int lastY = -1;
  for (GeoPosition gp : region.getGpxTrack()) 
  {
     //convert geo to world bitmap pixel
     Point2D pt = jXMapKit1.getMainMap().getTileFactory().geoToPixel(gp, jXMapKit1.getMainMap().getZoom());
     if (lastX != -1 && lastY != -1) {
        g.drawLine(lastX, lastY, (int) pt.getX(), (int) pt.getY());
     }
     lastX = (int) pt.getX();
     lastY = (int) pt.getY();
  }
  System.out.println("I am here");
  g.dispose();

   }


   };

但是,我在region.getGpxTrack()行得到一个错误。我尝试使用region only GeoPosition gp : region,它只在两点之间画了一条线。我要的是一条公路路线。有人知道我哪里搞错了吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-30 11:25:20

好的,我做了同样的事情,看看如果你像我在评论中假设的那样,用region替换region.getGpxTrack(),它是否可以工作。是的,它可以工作。这是一个完整的应用程序,其中包含了你想要做的事情:

代码语言:javascript
复制
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

import org.jdesktop.swingx.JXMapKit;
import org.jdesktop.swingx.JXMapKit.DefaultProviders;
import org.jdesktop.swingx.JXMapViewer;
import org.jdesktop.swingx.mapviewer.GeoPosition;
import org.jdesktop.swingx.painter.Painter;

public class Starter {
    public static void main(final String[] args) {    
        final JFrame f = new JFrame();
        f.setSize(500, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JXMapKit jXMapKit1 = new JXMapKit();
        jXMapKit1.setDefaultProvider(DefaultProviders.OpenStreetMaps);
        jXMapKit1.setCenterPosition(new GeoPosition(5.41984, 100.33924));
        jXMapKit1.setZoom(3);

        final List<GeoPosition> region = new ArrayList<GeoPosition>();
        region.add(new GeoPosition(5.42031, 100.34389));
        region.add(new GeoPosition(5.41984, 100.33924));
        region.add(new GeoPosition(5.42300, 100.33456));

        final Painter<JXMapViewer> lineOverlay = new Painter<JXMapViewer>() {

            @Override
            public void paint(Graphics2D g, final JXMapViewer map, final int w, final int h) {
                g = (Graphics2D) g.create();
                // convert from viewport to world bitmap
                final Rectangle rect = jXMapKit1.getMainMap().getViewportBounds();
                g.translate(-rect.x, -rect.y);

                // do the drawing
                g.setColor(Color.RED);
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g.setStroke(new BasicStroke(2));

                int lastX = -1;
                int lastY = -1;
                for (final GeoPosition gp : region) {
                    // convert geo to world bitmap pixel
                    final Point2D pt = jXMapKit1.getMainMap().getTileFactory().geoToPixel(gp, jXMapKit1.getMainMap().getZoom());
                    if (lastX != -1 && lastY != -1) {
                        g.drawLine(lastX, lastY, (int) pt.getX(), (int) pt.getY());
                    }
                    lastX = (int) pt.getX();
                    lastY = (int) pt.getY();
                }

                g.dispose();

            }

        };

        jXMapKit1.getMainMap().setOverlayPainter(lineOverlay);

        f.setContentPane(jXMapKit1);
        f.setVisible(true);

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14083437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档