首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割JTS多边形

如何分割JTS多边形
EN

Stack Overflow用户
提问于 2020-10-08 05:34:58
回答 1查看 591关注 0票数 2

我有一个很大的多边形,我想找到与多边形相交的特征,但由于多边形太大,我得到了超时异常。

我试图研究JTS方法,但无法获得如何使用它。

代码语言:javascript
复制
final List<Coordinate> coordinates = List.of(new Coordinate(0, 0), new Coordinate(-1, 1),
        new Coordinate(1, 3), new Coordinate(2, 3), new Coordinate(3, 1), new Coordinate(0, 0));
final GeometryFactory factory = new GeometryFactory();
final Polygon polygon = factory.createPolygon(coordinates.toArray(new Coordinate[0]));
final Geometry envelope = polygon.getEnvelope();

有没有人能告诉我如何拆分多边形对象?

EN

回答 1

Stack Overflow用户

发布于 2020-10-08 16:32:26

有许多(无限多的)方法可以分割多边形,但这就是我要做的,通过计算封套的中线并使新封套与多边形相交。

代码语言:javascript
复制
public List<Geometry> split(Polygon p) {
    List<Geometry> ret = new ArrayList<>();
    final Envelope envelope = p.getEnvelopeInternal();
    double minX = envelope.getMinX();
    double maxX = envelope.getMaxX();
    double midX = minX + (maxX - minX) / 2.0;
    double minY = envelope.getMinY();
    double maxY = envelope.getMaxY();
    double midY = minY + (maxY - minY) / 2.0;

    Envelope llEnv = new Envelope(minX, midX, minY, midY);
    Envelope lrEnv = new Envelope(midX, maxX, minY, midY);
    Envelope ulEnv = new Envelope(minX, midX, midY, maxY);
    Envelope urEnv = new Envelope(midX, maxX, midY, maxY);
    Geometry ll = JTS.toGeometry(llEnv).intersection(p);
    Geometry lr = JTS.toGeometry(lrEnv).intersection(p);
    Geometry ul = JTS.toGeometry(ulEnv).intersection(p);
    Geometry ur = JTS.toGeometry(urEnv).intersection(p);
    ret.add(ll);
    ret.add(lr);
    ret.add(ul);
    ret.add(ur);

    return ret;
  }

这为您的多边形提供了以下内容:

如果你在输出中再次调用它:

在生产环境中,您可能希望进行一些错误检查,以确保能够处理生成的点。

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

https://stackoverflow.com/questions/64252638

复制
相关文章

相似问题

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