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
Exemple #2
0
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
Exemple #3
0
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.")
Exemple #4
0
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)