如何将 JTS-Geometry 转换为 AWT-Shape?

Posted

技术标签:

【中文标题】如何将 JTS-Geometry 转换为 AWT-Shape?【英文标题】:How can I convert a JTS-Geometry into an AWT-Shape? 【发布时间】:2010-09-12 21:34:05 【问题描述】:

是否可以将com.vividsolutions.jts.geom.Geometry(或其子类)转换为实现java.awt.Shape 的类?我可以使用哪个库或方法来实现该目标?

【问题讨论】:

【参考方案1】:

还可以查看 JTS 库提供的 ShapeWriter。我使用以下代码将 jts 几何对象转换为 awt 形状。

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;

import javax.swing.JFrame;
import javax.swing.JPanel;

import com.vividsolutions.jts.awt.ShapeWriter;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.Polygon;

public class Paint extends JPanel
    public void paint(Graphics g) 

        Coordinate[] coords  = new Coordinate[] new Coordinate(400, 0),  new Coordinate(200, 200),  new Coordinate(400, 400), new Coordinate(600, 200), new Coordinate(400, 0) ;
        Polygon polygon = new GeometryFactory().createPolygon(coords);

        LineString ls = new GeometryFactory().createLineString(new Coordinate[] new Coordinate(20, 20),  new Coordinate(200, 20));

        ShapeWriter sw = new ShapeWriter();
        Shape polyShape = sw.toShape(polygon);
        Shape linShape = sw.toShape(ls);

        ((Graphics2D) g).draw(polyShape);
        ((Graphics2D) g).draw(linShape);


    
    public static void main(String[] args) 
        JFrame f = new JFrame();
        f.getContentPane().add(new Paint());
        f.setSize(700, 700);
        f.setVisible(true);
    

编辑:结果看起来像这张图片

【讨论】:

可能是个愚蠢的问题。为什么正方形有五个坐标? ;-) 不用担心。我认为多边形必须以相同的坐标开始和结束。因此第一个和最后一个是相同的【参考方案2】:

根据:

http://lists.jump-project.org/pipermail/jts-devel/2007-May/001954.html

有一门课:

com.vividsolutions.jump.workbench.ui.renderer.java2D.Java2DConverter

哪个能做到?

【讨论】:

以上是关于如何将 JTS-Geometry 转换为 AWT-Shape?的主要内容,如果未能解决你的问题,请参考以下文章

将 jzy3d.canvas 转换为 awt.component

如何将图标转换为图像

将 BufferedImage 转换为 ByteBuffer

将 JTextField 输入转换为整数

JAVA怎样将PPTX文件转换成图片

Java时间格式转换,如何获得时区?