def generate_habitats(n, default_area = lambda: 1.0, habitat_types=None, geom_wkb=False):

	habitats= []

	# Generate habitat types if none were given.
	if not habitat_types:
		habitat_types = generate_habitat_types()

	
	for i in range(n):
		habitat_type = habitat_types[i % len(habitat_types)]
		geom = geo_util.generate_multipolygon(wkb=geom_wkb)
			 
		o = Habitat(
				id = i,
				habitat_type = habitat_type,
				z = i * 100,
				area = default_area(),
				geom = geom
				)

		habitats.append(util_registry.get_or_register_object(o))

	return habitats
def generate_cells(n, type='km100', default_area = lambda: 1.0, habitats=None, habitats_per_cell=2):

	cells = []

	# Generate habitats if none were given.
	if not habitats:
		default_habitat_area = lambda: 1.0 * default_area()/habitats_per_cell 
		habitats = generate_habitats(n * habitats_per_cell, default_area = default_habitat_area)

	for i in range(n):

		cell_habitats = [habitats.pop() for i in range(habitats_per_cell)]

		o = Cell(
				type = type,
				type_id = "%s" % i,
				area = default_area(),
				geom = geo_util.generate_multipolygon(),
				habitats = cell_habitats
				)

		cells.append(util_registry.get_or_register_object(o))

	return cells