def get_average_conc_latlon(self, ll, tr): """ mengembalikan konsentrasi pencemar rata2 dalam suatu area ll=(lat, lon) tr=(lat, lon) """ ll_g = self.ll_lon, self.ll_lat tr_g = self.tr_lon, self.tr_lat ll_a = ll[1], ll[0] tr_a = tr[1], tr[0] if is_intersect(ll_a, tr_a, ll_g, tr_g) == False: #area tidak berpotongan return self.default_conc ll_a_utm = utm.convert_to_utm_fixzone(ll[0], ll[1], self.zone, self.hem) tr_a_utm = utm.convert_to_utm_fixzone(tr[0], tr[1], self.zone, self.hem) area_a = (tr_a_utm[0] - ll_a_utm[0]) * (tr_a_utm[1] - ll_a_utm[1]) # print ll_a_utm # print tr_a_utm total_c = 0 total_area = 0 for y, row in enumerate(self.data): for x, cell in enumerate(row): ll_cell_utm, tr_cell_utm = self.get_data_boundary_utm(x, y) try: area = intersect(ll_a_utm, tr_a_utm, ll_cell_utm, tr_cell_utm, self.cell_area) except: print "error", x, y, ll_a_utm, tr_a_utm, ll_cell_utm, tr_cell_utm print "--> ", is_intersect(ll_a_utm, tr_a_utm, ll_cell_utm, tr_cell_utm, True) if area == None: print "none", x, y, ll_a_utm, tr_a_utm, ll_cell_utm, tr_cell_utm total_area = total_area + area total_c = total_c + (cell.conc * area) # if total_area > 0: # avg_c = total_c / area_a # print area_a, total_area avg_c = self.default_conc if (total_area > 0) and (total_area > area_a): # print "scenario 1" avg_c = total_c / total_area # print ":::", area_a, total_area, ((total_area - area_a) / area_a) elif (total_area > 0) and (total_area < area_a): # print "scenario 2" avg_c = total_c / area_a # print ":::", area_a, total_area, ((total_area - area_a) / area_a) if avg_c < 0: avg_c = 0 return avg_c * self.conv_factor
def get_cell_boundary_utm(self, x, y, zone=None, hem=None): if zone == None: zone = self.zone if hem == None: hem = self.hem ll, tr = self.get_cell_boundary_latlon(x, y) utm_ll = utm.convert_to_utm_fixzone(ll[0], ll[1], zone, hem) utm_tr = utm.convert_to_utm_fixzone(tr[0], tr[1], zone, hem) return utm_ll, utm_tr
def get_cell_boundary_utm(self, x, y, zone=None, hem=None): if zone==None: zone = self.zone if hem==None: hem = self.hem ll, tr = self.get_cell_boundary_latlon(x, y) utm_ll = utm.convert_to_utm_fixzone(ll[0], ll[1], zone, hem) utm_tr = utm.convert_to_utm_fixzone(tr[0], tr[1], zone, hem) return utm_ll, utm_tr
def return_boundary_utm_nosave(self, zone, hem): """menghitung koordinat pojok kiri bawah dan pojok kanan atas seluruh data""" ll_data = self.data[0][0] tr_data = self.data[self.h - 1][self.w - 1] ll_x, ll_y = utm.convert_to_utm_fixzone(ll_data.lat, ll_data.lon, zone, hem) tr_x, tr_y = utm.convert_to_utm_fixzone(tr_data.lat, tr_data.lon, zone, hem) tr_x = tr_x + self.dx tr_y = tr_y + self.dy return (ll_x, ll_y, tr_x, tr_y)