def get_dismatrix(tasks): ''' 计算矩阵 :param tasks:字典格式{id:[x,y,start_time,end_time,q]} :return:实际距离矩阵,画图矩阵 ''' plot_matrix = pd.DataFrame(index=tasks.keys(), columns=tasks.keys()) dis_matrix = pd.DataFrame(index=tasks.keys(), columns=tasks.keys()) for k1, v1 in tasks.items(): for k2, v2 in tasks.items(): if k1 == k2: # 同一节点距离为0 dis_matrix[k1][k2] = 0 plot_matrix[k1][k2] = 0 if dis_matrix[k2][k1] >= 0: break else: new_plot = '' start = str(v1[0]) + ',' + str(v1[1]) end = str(v2[0]) + ',' + str(v2[1]) dis, plot = request_dis(start, end) #plot坐标转换 one_line = plot.split(';') for lonlat in one_line: ll = lonlat.split(',') lon = float(ll[0]) lat = float(ll[1]) new_lonlat = ct.gcj02_to_wgs84(lon, lat) point = str(new_lonlat[0]) + ',' + str(new_lonlat[1]) + ';' new_plot += point dis_matrix[k1][k2] = dis plot_matrix[k1][k2] = new_plot[:-1] dis_matrix[k2][k1] = dis plot_matrix[k2][k1] = new_plot[:-1] return dis_matrix, plot_matrix
def gd_convert_lbs_location(ak, imei, bts, **kwargs): """ bts: 1. ( mcc,mnc,lac,cellid,signal) 2. [ [mcc,mnc,lac,cellid,signal], .. ] return: {"infocode":"10000", "result":{"city":"惠州市","province":"广东省", "poi":"惠州会展中心","adcode":"441302","street":"文昌一路", "desc":"广东省 惠州市 惠城区 惠州大道 靠近惠州会展中心", "country":"中国","type":"4","location":"114.4209817,23.1027075", "road":"惠州大道","radius":"550","citycode":"0752"}, "info":"OK","status":"1"} """ url = "http://apilocate.amap.com/position?accesstype=0&imei={imei}&cdma=0&bts={bts}&output=json&key={key}" main = '' nears = [] if not isinstance(bts[0], (list, tuple)): bts = map(lambda _: str(_), bts) main = ','.join(bts) else: bts[0] = map(lambda _: str(_), bts[0]) main = ','.join(bts[0]) remains = bts[1:] for p in remains: nears.append(','.join(p)) nearbts = '|'.join(nears) url = url.format(imei=imei, bts=main, key=ak) r = requests.get(url) result = r.json().get('result', {}) data = {} lon, lat = result['location'].split(',') data['lon'] = float(lon) data['lat'] = float(lat) data['radius'] = float(result.get('radius', 0)) data['address'] =result.get('country','') + result.get('province','')+ \ result.get('city','')+result.get('street','') + result.get('poi','') data['desc'] = result.get('desc', '') data['lon'], data['lat'] = gcj02_to_wgs84(data['lon'], data['lat']) return data
def extract_hot_point(df, dst): # df is a groupby object line_num = 1 counter = 0 for key, values in df: rows = values.itertuples() last_row = next(rows) hot_line = [] for row in rows: counter += 1 if counter % 500000 == 0: print("processed {},0000 lines".format(int(counter / 10000))) if bool(row.status) ^ bool(last_row.status): # 0 -> 1: leave # 1 -> 0: arrive hot_line.append(row[0]) line_num += 1 last_row = row values = values.loc[hot_line] lon_array = values['longitude'].as_matrix() lat_array = values['latitude'].as_matrix() [lon_array, lat_array] = gcj02_to_wgs84(lon_array, lat_array) values[['longitude']] = lon_array values[['latitude']] = lat_array region_id = get_region_label(lon_array, lat_array) values['region'] = region_id mask = (values.region != -1) & (values.region != 0) & (values.region != 1) values = values[mask] values.to_csv(dst, index=False, header=False, mode='a+') #print(values.head(5)) stat = False if stat: print("total " + str(line_num) + " lines.")
def plot_poi(): poi_src = Path(r'/home/dlbox/Documents/func_region/Data/Point/CSV') srcs = poi_src.glob('*') df = [] for pth in srcs: #print(pth) #print(len(df.index)) df.append(pd.read_csv(pth)) c = pd.concat(df) c.drop(c.columns[[0, 1]], axis=1, inplace=True) # calibrate GPS lon = c['lng'].as_matrix() lat = c['lat'].as_matrix() [lon_, lat_] = gcj02_to_wgs84(lon, lat) c[['lng']] = lon_ c[['lat']] = lat_ region_labels = get_region_label(lon_, lat_) c['region'] = region_labels c = c[(c['region'] != 0) & (c['region'] != 1)] c.to_csv(poi_src.parent / 'total.csv', index=False)