JTS的泰森多边形
使用jts实现泰森多边形,不用懂算法,只需要理解算法的基本原理,学习怎么使用就可以了。
/**
* 泰森多边形
*/
public static void voronoiTest(){
VoronoiDiagramBuilder voronoiDiagramBuilder = new VoronoiDiagramBuilder();
List<Coordinate> coords = new ArrayList<Coordinate>();
Envelope clipEnvelpoe = new Envelope();
Random random = new Random(100);
for(int i=0;i<100;i++){
//使用过程中一把每个坐标需要配置一个属性数据,但是这个coord没法附带一个属性,
//否则剖分之后不知道多边形对应的点位
//可以使用coordinate的z值,作为一个唯一标志位
//剖分后的结果中,每个多边形会有一个getUserData方法,这个方法返回的对象就是
//对应的coordinate点位,x,y,z相同,但是地址不一样,根据z就能找到多边形对应的属性
//另一种方法是使用coordinate的hashCode也可以
Coordinate coord = new Coordinate(random.nextDouble(),random.nextDouble(),i);
//coord.setUserData(i);
coords.add(coord);
clipEnvelpoe.expandToInclude(coord);
if(i==80){
System.out.println(coord.hashCode());
}
}
/* coords.add(new Coordinate(2,0));
coords.add(new Coordinate(2,2));
coords.add(new Coordinate(0,2));
coords.add(new Coordinate(1,1));*/
voronoiDiagramBuilder.setSites(coords);
voronoiDiagramBuilder.setClipEnvelope(clipEnvelpoe);
Geometry geom = voronoiDiagramBuilder.getDiagram(JTSFactoryFinder.getGeometryFactory());
//System.out.println(geom.getGeometryN(0).getClass());
List<Geometry> geoms = new ArrayList<Geometry>();
for(int i=0;i<geom.getNumGeometries();i++){
//下面这个输出语句很重要,用来找到这个多边形对应的原始点位坐标
System.out.println(geom.getGeometryN(i).getUserData().hashCode());
geoms.add(geom.getGeometryN(i));
}
ShortestPath.showGeometry(geom);
}