public Polygon getMultipolygon() {
		final GeometryFactory gf = Helper.getGeometryFactory();
		CoordinateSequence shellSequence = gf.getCoordinateSequenceFactory().create(shellCoordinates.toArray(new Coordinate[0]));
		LinearRing shell = new LinearRing(shellSequence, gf);
		LinearRing[] holes = new LinearRing[this.holes.size()];
		LinkedList<LinearRing> rings = new LinkedList<LinearRing>();
		rings.add(shell);
		for(int holeIter=0; holeIter<this.holes.size(); holeIter++){
			LinkedList<Coordinate> holeCoordinates = this.holes.get(holeIter);
			CoordinateSequence holeSequence = gf.getCoordinateSequenceFactory().create(holeCoordinates.toArray(new Coordinate[0]));
			holes[holeIter] = new LinearRing(holeSequence, gf);
			rings.add(new LinearRing(holeSequence, gf));
		}
		Collections.sort(rings, new Comparator<LinearRing>() {
			@Override
			public int compare(LinearRing r1, LinearRing r2) {
				double o1 = new Polygon(r1, new LinearRing[0], gf).getArea();
				double o2 = new Polygon(r2, new LinearRing[0], gf).getArea();
				double difference = o2-o1;
				if(difference<0){
					return -1;
				}
				if(difference>0){
					return 1;
				}
				return 0;
			}
		});
		LinearRing exteriorRing = rings.remove(0);
		LinearRing[] interiorRings = rings.toArray(new LinearRing[rings.size()]);
		Polygon path = new Polygon(exteriorRing, interiorRings, gf);
		return path;
	}