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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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 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)