def map(): user_flag = 0 db = DB() # 今までに発生した事件を取得 sql = 'select * from occur;' occurdata = db.select(sql) # safeguardの家の場所を取得 sql = 'select * from safeguard;' safeguarddata = db.select(sql) # ログインしている(マップを見る)ユーザー情報取得(parent) sql = ('select buzzer_num,parent_lat,parent_lon,parent_name' ' from parent where parent_ID=%s;') inuserdata = db.select(sql, (current_user.id, )) if inuserdata == []: # parentではないときsafeguardの処理 user_flag = 1 sql = ('select safeguard_ID,safeguard_lat,safeguard_lon,safeguard_name' ' from safeguard where safeguard_ID=%s;') inuserdata = db.select(sql, (current_user.id, )) # map表示用(JavaScript)に渡す用のJson作成 create_json = cj.My_Json() data = create_json.data_molding(0, occurdata, 1, safeguarddata, inuserdata, user_flag) db.end_DB() # マップ表示 return render_template('map_display.html', data=data, name=inuserdata[0][3])
def ab_map(): if request.method == 'POST': buzzer_num = request.form['buzzer_num'] nowtime = request.form['nowtime'].replace(' ', '-') db = DB() regular_latlon_sql = ("select * from regular_data " "where date_format(regular_time, \'%Y-%m-%d\')" "=date_format(\'{0}\',\'%Y-%m-%d\') and " "buzzer_num=\'{1}\'").format(nowtime, buzzer_num) regular_latlon = db.select(regular_latlon_sql) create_json = cj.My_Json() abjson = create_json.abnormal_json(regular_latlon) db.end_DB() return render_template('map_display.html', data=abjson, name='異常検知')
def map(): user_flag = 0 db = DB() # 今までに発生した事件を取得 sql = 'select * from occur;' occurdata = db.select(sql) # safeguardの家の場所を取得 sql = 'select * from safeguard;' safeguarddata = db.select(sql) # ログインしている(マップを見る)ユーザー情報取得(parent) sql = ('select buzzer_num,parent_lat,parent_lon,parent_name' ' from parent where parent_ID=%s;') inuserdata = db.select(sql, (current_user.id, )) if not inuserdata: # parentではないときsafeguardの処理 user_flag = 1 sql = ('select safeguard_ID,safeguard_lat,safeguard_lon,safeguard_name' ' from safeguard where safeguard_ID=%s;') inuserdata = db.select(sql, (current_user.id, )) # map表示用(JavaScript)に渡す用のJson作成 create_json = cj.My_Json() data = create_json.data_molding(0, occurdata, 1, safeguarddata, inuserdata, user_flag) db.end_DB() error_text = None try: is_error = request.args.get('is_error') if int(is_error): error_text = "すべての項目を入力してください" # マップ表示 return render_template('map_display.html', data=data, name=inuserdata[0][3], error_text=error_text) except: return render_template('map_display.html', data=data, name='ログイン中 : ' + inuserdata[0][3] + 'さん')
def get_wio_data(): if request.method == 'GET': wio_lat = float(request.args.get('lat')) wio_lon = float(request.args.get('lon')) flag = int(request.args.get('flag')) parent_ID = request.args.get('parent_ID') buzzer_num = request.args.get('buzzer_num') if request.method == 'POST': wio_lat = float(request.form['lat']) wio_lon = float(request.form['lon']) flag = int(request.form['flag']) parent_ID = request.form['parent_ID'] buzzer_num = request.form['buzzer_num'] if wio_lat == 0: wio_lat = 31 if wio_lon == 0: wio_lon = 131 # latlonを住所変換 occur_address = cj.iktoaddress(wio_lat, wio_lon) if occur_address is None: occur_address = 'address' # 現在時刻の取得 jtz = pytz.timezone('Asia/Tokyo') nowtime = datetime.now(jtz).strftime('%Y-%m-%d %H-%M-%S') mail = My_Mail(app) db = DB() # ブザーの持ち主(保護者)のデータを取得し送信 sql = ('select parent_name,parent_mail_address from parent' ' where parent_ID=%s') pdata = db.select(sql, (parent_ID, )) # 定期通信用 if flag == 0: # 危険エリア最適化 area_flag = 0 # 危険エリアに入っているか sql = ('select occur_ID,area_concentration from Hazardous_area' ' where area_a_lat>=%s and area_b_lat<=%s and area_a_lon<=%s' ' and area_b_lon>=%s and miss_flag!=1') data = ( wio_lat, wio_lat, wio_lon, wio_lon, ) area_data = db.select(sql, data) # 危険エリアに入っていたら if area_data: for ac in area_data: acon_dict = json.loads(ac[1]) for i in range(1, 6): for j in range(1, 6): key = 'co' + str(i) + str(j) # メッシュ化したマスのどこかを調べる if acon_dict[key][0][0] <= wio_lon and \ acon_dict[key][0][1] >= wio_lon and \ acon_dict[key][1][0] >= wio_lat and \ acon_dict[key][1][1] <= wio_lat: # 濃度を減らす acon_dict[key][2] = acon_dict[key][2] - 1 area_flag = 1 # DBの濃度情報を更新 sql = ('update Hazardous_area set area_concentration=%s' ' where occur_ID=%s') data = ( json.dumps(acon_dict), ac[0], ) db.insert_update(sql, data) # 家または学校の情報をとる school_house_sql = ('select parent_lat,parent_lon,' 'school_lat,school_lon from parent' ' where parent_ID=%s') school_house_data = db.select(school_house_sql, (parent_ID, )) # 学校から現在地の距離を計算 cd = CalcDistance([[ school_house_data[0][0], school_house_data[0][1], 'name', 'address' ]]) school_dis = cd.cal_rho(wio_lat, wio_lon) # 家から現在地の距離を計算 cd = CalcDistance([[ school_house_data[0][2], school_house_data[0][3], 'name', 'address' ]]) home_dis = cd.cal_rho(wio_lat, wio_lon) if float(school_dis[0]) >= 100 or float(home_dis[0]) >= 50: if area_flag == 1: area_flag = 4 else: area_flag = 3 # 異常検知 knn = KNN2d(buzzer_num) result = knn.main(wio_lat, wio_lon) if result: # メール送信 mail.ab_send_mail(pdata, nowtime, occur_address, buzzer_num) # 異常検知用のDBに入れる sql = "insert into regular_data value (%s,%s,%s,%s)" data = ( buzzer_num, wio_lat, wio_lon, nowtime, ) db.insert_update(sql, data) db.end_DB() return str(area_flag) # ボタンが押された用 elif flag: sql = 'select * from occur' lendata = len(db.select(sql)) # 事件をoccurに保存 sql = ('insert into occur(occur_ID,parent_ID,buzzer_num,occur_lat,' 'occur_lon,occur_time,occur_address)' ' value (%s,%s,%s,%s,%s,%s,%s)') data = ( lendata + 1, parent_ID, buzzer_num, wio_lat, wio_lon, nowtime, occur_address, ) db.insert_update(sql, data) # 保存した事件のoccur_IDを取得 sql = ('select occur_ID from occur' ' where parent_ID=%s and occur_lat=%s and occur_lon=%s') data = ( parent_ID, wio_lat, wio_lon, ) occur_ID = db.select(sql, data)[-1][0] # 保護者にメール送信 mail.pbz_send_mail(pdata, nowtime, occur_address, occur_ID, parent_ID, buzzer_num, wio_lat, wio_lon) # safeguardの情報取得 sql = ('select' ' safeguard_lat,safeguard_lon,' 'safeguard_name,safeguard_mail_address' ' from safeguard') sdata = db.select(sql) cd = CalcDistance(sdata) # 発生地点から500m以内にある家のリストを取得し、送信 s_namail_list = cd.choice_senduser(cd.cal_rho(wio_lat, wio_lon)) if s_namail_list: mail.sbz_send_mail(s_namail_list, nowtime, occur_address, wio_lat, wio_lon) # 対角の座標取得(発生地点を中心) edge_ab = great_circle(distance=100 * math.sqrt(2), azimuth=[135, -45], latitude=wio_lat, longitude=wio_lon) # 濃度を保持するJsonの作成 create_json = cj.My_Json() coo_dict = create_json.concentration_json(edge_ab) # JsonをHazardous_areaに保存 sql = ('insert into Hazardous_area' '(occur_ID,area_a_lat,area_a_lon,' 'area_b_lat,area_b_lon,area_concentration)' 'value (%s,%s,%s,%s,%s,%s)') data = ( occur_ID, coo_dict['a'][0], coo_dict['a'][1], coo_dict['b'][0], coo_dict['b'][1], json.dumps(coo_dict['latlon']), ) db.insert_update(sql, data) db.end_DB() return '2' return '0'