2

我有大量的多边形,我想在世界风上渲染它们。所以我使用他们的 Polygon 类如下:

        ShapeAttributes normalAttributes = new BasicShapeAttributes();

        normalAttributes.setInteriorMaterial(Material.YELLOW);
        normalAttributes.setOutlineWidth(2);
        normalAttributes.setOutlineOpacity(0.5);
        normalAttributes.setDrawInterior(true);
        normalAttributes.setDrawInterior(true);

        //define the coordinates position
        ArrayList<Position> positions = new ArrayList<Position>();
        positions.add(Position.fromDegrees(52, 10, 5e4));
        positions.add(Position.fromDegrees(55, 11, 5e4));
        positions.add(Position.fromDegrees(55, 11, 5e4));
        positions.add(Position.fromDegrees(52, 14, 5e4));
        positions.add(Position.fromDegrees(52, 10, 5e4));

        Polygon poly = new Polygon(positions);

它适用于小型数据集,但是当多边形数量增加(~45k)时,它会耗尽内存(4GB),或者数量较少时运行缓慢。有人可以建议一些技术来有效地渲染如此大的数据集。谢谢,

4

1 回答 1

2

您可能需要简化多边形中的点数。一种方法是使用Ramer-Douglas-Peucker 算法。使用它,您可以在保持多边形形状的同时大大减少多边形内的点数。

该算法有许多可用的实现,具体取决于许可,包括simple-java(MIT 许可)

于 2016-01-22T16:11:38.163 回答