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()
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
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]
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
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