Exemplo n.º 1
0
 def demo3(self):
     import databundles
     import databundles.library as dl
     import databundles.geo as dg
     from matplotlib import pyplot as plt
     import numpy as np
   
     l = dl.get_library()
     aa = dg.get_analysis_area(l, geoid='CG0666000')
     r =  l.find(dl.QueryCommand().identity(id='a2z2HM').partition(table='incidents',space=aa.geoid)).pop()
     p = l.get(r.partition).partition
     a = aa.new_array()
     k = dg.ConstantKernel(9)
     
     print aa
     
     k.apply_add(a, dg.Point(400,1919)) 
     k.apply_add(a, dg.Point(400,1920)) 
     k.apply_add(a, dg.Point(400,1921)) 
     k.apply_add(a, dg.Point(400,1922))   
     k.apply_add(a, dg.Point(400,1923))   
     
     for row in p.query("select date, time, cellx, celly from incidents"):
         p = dg.Point(row['cellx'],row['celly'])
         k.apply_add(a, p)
         
     a /= np.max(a)
     print np.sum(a)
     
     img = plt.imshow(a, interpolation='nearest')
     img.set_cmap('spectral_r')
     plt.colorbar()
     plt.show()       
Exemplo n.º 2
0
 def get_incident_source(self):
     """Return the partition from the dataset that has the incidents"""
     import databundles.library as dl
     import databundles.geo as dg
     
     l = self.library
     aa = dg.get_analysis_area(l, geoid=self.config.build.aa_geoid)
     r =  l.find(dl.QueryCommand().identity(id='a2z2HM').partition(table='incidents',space=aa.geoid)).pop()
     return  aa, l.get(r.partition).partition
Exemplo n.º 3
0
   def _get_sub_aas(self):
       import yaml
       import databundles.geo as dg
       import databundles.library as dl
       aa = dg.get_analysis_area(dl.get_library(), geoid=self.config.build.aa_geoid)
       
       with open(self.filesystem.path('extracts','envelopes.yaml')) as f:
           envelopes = yaml.load(f)
           
       aas = []
       for r in envelopes:
           
           saa = aa.get_aa_from_envelope(r['env'], '', '')
           
           aas.append( (r['area'], saa))
 
       aas = sorted(aas, cmp=lambda x,y: cmp(x[0], y[0]), reverse=True)
       
       return [aa[1] for aa in aas]
Exemplo n.º 4
0
    def build_aa_map(self):
        '''
        '''
        import databundles.library as dl
        import databundles.geo as dg
        import random 
        from numpy import  ma
        
        rs = 3
    
        # make a helper to store files in the extracts directory
        ed = lambda f: self.filesystem.path('extracts','subs',f+'.tiff')
    
        l = dl.get_library()
        aa = dg.get_analysis_area(l, geoid=self.config.build.aa_geoid)
        
        r =  l.find(dl.QueryCommand().identity(id='a2z2HM').partition(table='incidents',space=aa.geoid)).pop()
        source_partition = l.get(r.partition).partition

        k = dg.GaussianKernel(33,11)
        
        sub_aas = [self.get_sub_aas()[1]]
        
        top_a = aa.new_array()
        for i, sub_aa in enumerate(sub_aas):
            where = sub_aa.is_in_ll_query()
            sub_a = sub_aa.new_array()
            trans = sub_aa.get_translator()

            q = "select * from incidents WHERE {}".format(where)
        
            for row in source_partition.query(q):
                p = trans(row['lon'],row['lat'])
                k.apply_add(sub_a, p)
                print row
            
            sub_aa.write_geotiff(ed(str(i)), dg.std_norm(ma.masked_equal(sub_a,0)))
            sub_aa.write_geotiff(ed(str(i)), sub_a)

      
        return True
Exemplo n.º 5
0
    def extract_incident_shapefile(self, data):
        import ogr 
        import databundles.library as dl
        import databundles.geo as dg
        import random
        import dateutil.parser
        
        path, fpath, drv, options = self.get_extract_name(data)
        
        if os.path.exists(fpath):
            return fpath
        
        year = data['year']
            
        source_bundle  = self.library.dep('aacrime')
            
        l = self.library
        aa = dg.get_analysis_area(l, geoid=self.config.build.aa_geoid)
        r =  l.find(dl.QueryCommand().identity(id=source_bundle.identity.id_).partition(table='incidents',space=aa.geoid)).pop()
        
        source_partition = l.get(r.partition).partition
            
        ds = drv.CreateDataSource(path, options=options)
        srs = ogr.osr.SpatialReference()
        srs.ImportFromEPSG(4326) # Lat/Long in WGS84
        lyr = ds.CreateLayer( "incidents", srs, ogr.wkbPoint )

        lyr.CreateField(ogr.FieldDefn( "type", ogr.OFTString )) # 0 
        
        fn=ogr.FieldDefn( "time", ogr.OFTString ) # 1
        fn.SetWidth(8)
        lyr.CreateField(fn)
        
        lyr.CreateField(ogr.FieldDefn( "hour", ogr.OFTInteger )) # 2
        lyr.CreateField(ogr.FieldDefn( "day_time", ogr.OFTInteger )) # 3
        
        fn = ogr.FieldDefn( "date", ogr.OFTString ) # 4
        fn.SetWidth(10)
        lyr.CreateField(fn)
        
        fn = ogr.FieldDefn( "desc", ogr.OFTString ) # 5 
        fn.SetWidth(400)
        lyr.CreateField(fn)  
           
        fn = ogr.FieldDefn( "addr", ogr.OFTString ) # 6
        fn.SetWidth(100)
        lyr.CreateField(fn)           
        

        rnd = .00001 * 100 # Approx 100m
        for row in source_partition.query("""
        select date, time, lat, lon, type , description, address from incidents 
        where  CAST(strftime('%Y', date) AS INTEGER) = {year} """.format(year=year)):

            pt = ogr.Geometry(ogr.wkbPoint)
            
            px = row['lon']+random.uniform(-rnd, rnd)
            py = row['lat']+random.uniform(-rnd, rnd)

            
            pt.SetPoint_2D(0, px, py )

            feat = ogr.Feature(lyr.GetLayerDefn())
            
            try:  hour = dateutil.parser.parse(row['time']).time().hour
            except: hour = None
   
          
            feat.SetField(0, str(row['type']) )
            feat.SetField(1, str(row['time']) )  
            feat.SetField(2, hour )    
            feat.SetField(3, None )                 
            feat.SetField(4, str(row['date']) )     
            feat.SetField(5, str(row['description']) )  
            feat.SetField(6, str(row['address']) ) 
            feat.SetGeometry(pt)
            lyr.CreateFeature(feat)
            feat.Destroy()
        
        if data['format'] == 'shapefile':
            from databundles.util import zip_dir
            zip_dir(os.path.dirname(path), fpath)
            return fpath
        else:
            return path