def handle(self, *args, **kwargs):
        now = datetime.now()

        #error_file = open("gis_errors.txt", "w")
        #success_file = open("gis_success.txt", "w")
        output_sql = open(get_logfile_path("boundaries_sql", "sql"), "w")
        BOUNDARY_TYPES = {
            'district': 'admin1',
            'block': 'admin2',
            'project': 'admin2',
            'cluster': 'admin3',
            'circle': 'admin3'
        }
        empty_boundaries = []
        for hierarchy in BoundaryHierarchy.objects.all():
            hierarchy_name = hierarchy.name
            if hierarchy_name not in BOUNDARY_TYPES:
                continue
            admin_level = BOUNDARY_TYPES[hierarchy_name]
            boundaries = Boundary.objects.filter(hierarchy=hierarchy)
            for boundary in boundaries:
                qstring = "schooldetails__%s" % admin_level
                filter_q = {qstring: boundary}
                schools = School.objects.filter(**filter_q).exclude(instcoord__isnull=True)
                if not schools.exists():
                    empty_boundaries.append(boundary.id)
                    continue
                #import pdb;pdb.set_trace()
                points = [s.instcoord.coord for s in schools]
                multipoint_string = ", ".join(["%f %f" % (p.x, p.y,) for p in points])
                multipoint_wkt = "MULTIPOINT(%s)" % multipoint_string
                hierarchy_cap = hierarchy_name.capitalize()
                if BoundaryCoord.objects.filter(boundary=boundary).exists():
                    sql = "UPDATE boundary_coord SET coord=ST_SetSRID(ST_Centroid('%s'), 4326) WHERE id_bndry=%d;" % (multipoint_wkt, boundary.id,)
                else:
                    sql = "INSERT INTO boundary_coord (id_bndry, type, coord) VALUES (%d, '%s', ST_SetSRID(ST_Centroid('%s'), 4326));" % (boundary.id, hierarchy_cap, multipoint_wkt,)
                print sql
                output_sql.write(sql + "\n")
        output_sql.close()
        errors = open(get_logfile_path("empty_boundaries", "txt"), "w")
        errors.write(json.dumps(empty_boundaries, indent=2))
        errors.close()
Exemple #2
0
 def handle(self, *args, **kwargs):
     output_sql = open(get_logfile_path("gis_sql", "sql"), "w")
     #output_writer = csv.writer(output_csv)
     dise_not_found = []
     successes = []
     for school in School.objects.exclude(instcoord__isnull=False)\
                                 .exclude(dise_info__isnull=True):
         dise_code = school.dise_info_id
         try:
             dise_code_int = int(dise_code)
         except:
             continue
         gis_results = SchoolGIS.objects.filter(code=dise_code_int)
         if gis_results.count() == 0:
             print "Dise code not found: " + dise_code
             dise_not_found.append(dise_code_int)
             #error_file.write("Dise code not found: " + dise_code + "\n")
         elif gis_results.count() > 1:
             print "More than one Dise code found: " + dise_code
             #error_file.write("More than one Dise code found: " + dise_code + "\n")
         else:
             gis = gis_results[0]
             sql = "INSERT INTO inst_coord (instid, coord) VALUES (%s, ST_GeomFromText('%s', 4326));\n" % (
                 school.id,
                 gis.centroid.wkt,
             )
             output_sql.write(sql)
             success = {
                 'gis_master_name': gis.name,
                 'klp_name': school.name,
                 'klp_id': school.id
             }
             successes.append(success)
     output_sql.close()
     error_file = open(get_logfile_path("gis_errors", "txt"), "w")
     error_file.write(json.dumps(dise_not_found, indent=2))
     error_file.close()
     success_file = open(get_logfile_path("gis_success", "txt"), "w")
     success_file.write(json.dumps(successes, indent=2))
     success_file.close()
 def handle(self, *args, **kwargs):
     output_sql = open(get_logfile_path("gis_sql", "sql"), "w")
     #output_writer = csv.writer(output_csv)
     dise_not_found = []
     successes = []
     for school in School.objects.exclude(instcoord__isnull=False)\
                                 .exclude(dise_info__isnull=True):
         dise_code = school.dise_info_id
         try:
             dise_code_int = int(dise_code)
         except:
             continue
         gis_results = SchoolGIS.objects.filter(code=dise_code_int)
         if gis_results.count() == 0:
             print "Dise code not found: " + dise_code
             dise_not_found.append(dise_code_int)
             #error_file.write("Dise code not found: " + dise_code + "\n")
         elif gis_results.count() > 1:
             print "More than one Dise code found: " + dise_code
             #error_file.write("More than one Dise code found: " + dise_code + "\n")
         else:
             gis = gis_results[0]
             sql = "INSERT INTO inst_coord (instid, coord) VALUES (%s, ST_GeomFromText('%s', 4326));\n" % (school.id, gis.centroid.wkt,)
             output_sql.write(sql)    
             success = {
                 'gis_master_name': gis.name,
                 'klp_name': school.name,
                 'klp_id': school.id
             }
             successes.append(success)
     output_sql.close()
     error_file = open(get_logfile_path("gis_errors", "txt"), "w")
     error_file.write(json.dumps(dise_not_found, indent=2))
     error_file.close()
     success_file = open(get_logfile_path("gis_success", "txt"), "w")
     success_file.write(json.dumps(successes, indent=2))
     success_file.close()