def get_mapserver_data_string(self, filters=None, srid=4326):

		# Get base mapserver query.
		q, q_primary_alias, q_registry, q_entities = self.get_base_mapserver_query(filters=filters)

		# Register the necssary entity dependencies.
		for field in ['habitat_type.energy', 'habitat_type.substrate.id']:
			q = self.register_field_dependencies(q, q_registry, field)

		# Get specific entity aliases.
		ht_parent_str = self.get_field_parent_str('habitat_type.energy')	
		ht_alias = q_registry[ht_parent_str]

		# Define labeled query components.
		# NOTE: for compatibility w/ PostGIS+Mapserver, select geometry as 'RAW' and explicitly specify SRID 4326.
		geom = func.ST_SetSRID(q_primary_alias.geom.RAW, 4326).label('hab_geom')
		geom_id = q_primary_alias.id.label('geom_id')
		substrate_id = ht_alias.substrate_id.label('substrate_id')
		energy = ht_alias.energy.label('energy')
		area = ht_alias.energy.label('area')

		# Select only the labeleld components defined above.
		q = q.with_entities(geom, geom_id, substrate_id, energy).order_by(desc(area))

		# Get raw sql for query.
		q_raw_sql = sa_compile.query_to_raw_sql(q)

		# Add query into mapserver data string.
		mapserver_data_str = "hab_geom from (%s) AS subquery USING UNIQUE geom_id USING srid=%s" % (q_raw_sql, srid)

		return mapserver_data_str
	def get_mapserver_data_string(self, result_field=None, filters=[], srid=4326):

		# Create filter for selecting value field.
		result_field_filter = {
				'field': 'field',
				'op': '==',
				'value': result_field['field']
				}

		# Get base mapserver query.
		q, q_primary_alias, q_registry, q_entities = self.get_base_mapserver_query(filters= filters + [result_field_filter])

		# Create field definition for the 'value' column.
		# Note that we use density, rather than total value.
		value_field = {
				'id': 'value',
				'template': '{field:value}/{field:cell.area}',
				'aggregate_funcs': result_field.get('aggregate_funcs', ['sum'])
				}

		# Register the value field.
		q = self.register_field_dependencies(q, q_registry, value_field.get('template', '{{field:{}}}'.format(value_field['id'])))
		value_field_entity = self.get_field_entity(q_registry, value_field)

		# Make labeled entity for aggregate function.
		func_name = value_field['aggregate_funcs'][0]
		aggregate_func = getattr(func, func_name)
		aggregate_entity = aggregate_func(value_field_entity).label("value_field")
		q_entities.add(aggregate_entity)

		# Register the necssary entity dependencies.
		for field in ['{field:cell.geom}']:
			q = self.register_field_dependencies(q, q_registry, field)

		# Get specific entity aliases.
		cell_parent_str = self.get_field_parent_str('cell.id')	
		cell_alias = q_registry[cell_parent_str]

		# Define labeled query components.
		# NOTE: for compatibility w/ PostGIS+Mapserver, select geometry as 'RAW' and explicitly specify SRID 4326.
		geom = func.ST_SetSRID(cell_alias.geom.RAW, 4326).label('geom')
		geom_id = cell_alias.id.label('geom_id')

		# Select only the labeleld components defined above, grouping on cell.
		q = q.with_entities(geom, geom_id, aggregate_entity).group_by(cell_alias.id)

		# Get raw sql for query.
		q_raw_sql = sa_compile.query_to_raw_sql(q)

		# Add query into mapserver data string.
		mapserver_data_str = "geom from (%s) AS subquery USING UNIQUE geom_id USING srid=%s" % (q_raw_sql, srid)

		return mapserver_data_str