JTS: преобразование ShapeReader не всегда правильно определяет дыры - PullRequest
1 голос
/ 27 марта 2020

Геометрия, которую я создаю из области с ShapeReader.read, каким-то образом включает в себя «дыры» этой области, хотя для нее было задано WIND_EVEN_ODD правило намотки.

Как мне остановить его? включая отверстия?

Вот простой пример с полым прямоугольником:

import org.locationtech.jts.awt.ShapeReader;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;

import java.awt.geom.Path2D;
import java.awt.Rectangle;
import java.awt.geom.Area;

private final GeometryFactory geometryFactory = new GeometryFactory();
private ShapeReader reader = new ShapeReader(geometryFactory);

Rectangle rectBig = new Rectangle(0, 0, 100, 100);
Rectangle rectSmall = new Rectangle(25, 25, 50, 50);

// Subtract small from large to get hollow rectangle
Area area = new Area(rectBig);
area.subtract(new Area(rectSmall));

// Convert area to geometry
Path2D.Double path = new Path2D.Double(area);
path.setWindingRule(PathIterator.WIND_EVEN_ODD);
Geometry geometry  = reader.read(path.getPathIterator(null)); 

// Center point of the hole of the rectangle
Coordinate coordinate = new Coordinate(50, 50);
Point center = geometryFactory.createPoint(coordinate);

// Returns true instead of false
System.out.println("Center intersects hole? " + geometry.intersects(center));

...