def run(self): result = LeaseBlock.objects.all() #GeoPhysical if self.input_parameter_distance_to_shore: result = result.filter(max_distance__gte=self.input_min_distance_to_shore, max_distance__lte=self.input_max_distance_to_shore) if self.input_parameter_depth: input_min_depth = feet_to_meters(-self.input_min_depth) input_max_depth = feet_to_meters(-self.input_max_depth) result = result.filter(min_depth__lte=input_min_depth, max_depth__gte=input_max_depth) if self.input_parameter_substrate: input_substrate = [s.substrate_name for s in self.input_substrate.all()] result = result.filter(majority_substrate__in=input_substrate) if self.input_parameter_sediment: input_sediment = [s.sediment_name for s in self.input_sediment.all()] result = result.filter(majority_sediment__in=input_sediment) #Wind Energy if self.input_parameter_wind_speed: input_wind_speed = mph_to_mps(self.input_avg_wind_speed) result = result.filter(min_wind_speed__gte=input_wind_speed) if self.input_parameter_wea: input_wea = [wea.wea_id for wea in self.input_wea.all()] result = result.filter(wea_number__in=input_wea) if self.input_parameter_distance_to_awc: result = result.filter(awc_min_distance__lte=self.input_distance_to_awc) #Shipping if self.input_filter_ais_density: result = result.filter(ais_mean_density__lte=1) if self.input_filter_distance_to_shipping: result = result.filter(tsz_min_distance__gte=self.input_distance_to_shipping) self.geometry_final_area = sum([r.geometry.area for r in result.all()]) leaseblock_ids = [r.id for r in result.all()] self.lease_blocks = ','.join(map(str, leaseblock_ids)) if self.lease_blocks == '': self.satisfied = False else: self.satisfied = True return True
def run(self): result = LeaseBlock.objects.all() #import pdb #pdb.set_trace() #GeoPhysical if self.input_parameter_distance_to_shore: #why isn't this max_distance >= input.min_distance && min_distance <= input.max_distance ??? result = result.filter(avg_distance__gte=self.input_min_distance_to_shore, avg_distance__lte=self.input_max_distance_to_shore) if self.input_parameter_depth: #note: converting input to negative values and converted to meters (to match db) input_min_depth = feet_to_meters(-self.input_min_depth, 3) input_max_depth = feet_to_meters(-self.input_max_depth, 3) #result = result.filter(min_depth__lte=input_min_depth, max_depth__gte=input_max_depth) result = result.filter(avg_depth__lte=input_min_depth, avg_depth__gte=input_max_depth) result = result.filter(avg_depth__lt=0) #not sure this is doing anything, but do want to ensure 'no data' values are not included ''' if self.input_parameter_substrate: input_substrate = [s.substrate_name for s in self.input_substrate.all()] result = result.filter(majority_substrate__in=input_substrate) if self.input_parameter_sediment: input_sediment = [s.sediment_name for s in self.input_sediment.all()] result = result.filter(majority_sediment__in=input_sediment) ''' #Wind Energy if self.input_parameter_wind_speed: #input_wind_speed = mph_to_mps(self.input_avg_wind_speed) result = result.filter(min_wind_speed_rev__gte=self.input_avg_wind_speed) if self.input_parameter_wea: input_wea = [wea.wea_id for wea in self.input_wea.all()] result = result.filter(wea_number__in=input_wea) if self.input_parameter_distance_to_awc: result = result.filter(awc_min_distance__lte=self.input_distance_to_awc) #Shipping if self.input_filter_ais_density: result = result.filter(ais_mean_density__lte=1) if self.input_filter_distance_to_shipping: result = result.filter(tsz_min_distance__gte=self.input_distance_to_shipping) dissolved_geom = result[0].geometry for lb in result: try: dissolved_geom = dissolved_geom.union(lb.geometry) except: pass from django.contrib.gis.geos import MultiPolygon if type(dissolved_geom) == MultiPolygon: self.geometry_dissolved = dissolved_geom else: self.geometry_dissolved = MultiPolygon(dissolved_geom, srid=dissolved_geom.srid) self.active = True self.geometry_final_area = sum([lb.geometry.area for lb in result.all()]) leaseblock_ids = [lb.id for lb in result.all()] self.lease_blocks = ','.join(map(str, leaseblock_ids)) #pdb.set_trace() if self.lease_blocks == '': self.satisfied = False else: self.satisfied = True return True