Exemplo n.º 1
0
def fetch():
    road_data1 = load_model2road('./road/center.txt')
    road_data = load_model2road('./road_2/center.txt')
    for road in road_data:
        if main_road(road.name):
            road_data1.append(road)
    save_road2model('./road/center_.txt', road_data1)
Exemplo n.º 2
0
def into_test():
    road_data = load_model2road('./road_main/center1.txt')
    test_data = []
    for road in road_data:
        if road.rid == 671:
            test_data.append(road)
    save_road2model('./road_test/center1.txt', test_data)
Exemplo n.º 3
0
def center_mark():
    road_data = load_model2road('./road_new/center1.txt')
    # minx, maxx, miny, maxy = 1e10, 0, 1e10, 0
    for road in road_data:
        xylist = road.point_list
        grid_set = set()
        for pt in xylist:
            grid_set.add(grid(pt.px, pt.py))
        road.set_grid_set(grid_set)
    save_road2model('./road_new/center1.txt', road_data)
Exemplo n.º 4
0
def center_8():
    """
    delete roads
    :return: 
    """
    road_data = load_model2road('./road_new/center1.txt')
    save_data = []
    for road in road_data:
        if road.rid != 730 and road.rid != 706 and road.rid != 1197:
            save_data.append(road)
    save_road2model('./road_new/center1.txt', save_data)
Exemplo n.º 5
0
def par_mark():
    road_data = load_model2road('./road_new/par.txt')
    # minx, maxx, miny, maxy = 1e10, 0, 1e10, 0
    for road in road_data:
        par_simplify(road)
        xylist = road.point_list
        grid_set = set()
        for pt in xylist:
            grid_set.add(grid(pt.px, pt.py))
        road.set_grid_set(extend_grid(grid_set))

    save_road2model('./road_new/par.txt', road_data)
Exemplo n.º 6
0
def center1():
    """
    split into small segments
    """
    center_road = load_model2road('./road/center1.txt')

    new_center_road = []
    for road in center_road:
        new_center_road.extend(center_split3(road))

    for i, road in enumerate(new_center_road):
        road.set_rid(i)

    save_road2model('./road/center_1.txt', new_center_road)
Exemplo n.º 7
0
def center_4():
    """
    合并道路
    :return: 
    """
    road_data = load_model2road('./road/center0.txt')
    link = {u'登云路': u'古翠路'}
    for road0 in road_data:
        for road1 in road_data:
            name0, name1 = road0.name, road1.name
            if name0 in link.keys() and name1 == link[name0]:
                print name0, name1
                center_one_merge(road0, road1)
    save_road2model('./road/center.txt', road_data)
Exemplo n.º 8
0
def center_7():
    """
    连接两条center
    :return: 
    """
    road_data = load_model2road('./road_new/center1.txt')
    for road in road_data:
        if road.rid == 4439:
            br0 = road
        elif road.rid == 4698:
            er0 = road
    pt = copy(er0.point_list[0])
    br0.point_list.append(pt)

    save_road2model('./road_new/center2.txt', road_data)
Exemplo n.º 9
0
def par1():
    """
    切路口
    :return:
    """
    road_data = load_model2road('./road/par0.txt')

    for i, road0 in enumerate(road_data):
        for j, road1 in enumerate(road_data):
            if i < j and road0.name != road1.name and road_near(road0, road1):
                par_cross(road0, road1)

    # 切掉路口那段
    for road in road_data:
        par_cut(road)
    save_road2model('./road/par1.txt', road_data)
Exemplo n.º 10
0
def center2():
    """
    中心线最后分隔
    :return:
    """
    center_road = load_model2road('./road/center1.txt')
    new_center_road = center_road[:]
    center_road = []
    for road in new_center_road:
        center_road.append(center_simplify(road))
    new_center_road = []
    for road in center_road:
        new_center_road.extend(center_split3(road))
    # rid
    for i, road in enumerate(new_center_road):
        road.set_rid(i)
    save_road2model('./road/center2.txt', new_center_road)
Exemplo n.º 11
0
def par0():
    """ 
    对平行线的优化,
    组成可以使用的路网
    :return:
    """
    road_data = load_model2road('./road_main/par.txt')
    # for i, road0 in enumerate(road_data):
    #     for j, road1 in enumerate(road_data):
    #         if i < j:
    #             par_divide(road0, road1)
    # print "par_divide 0"
    # # 偏移终点起点的路口
    # for i, road0 in enumerate(road_data):
    #     for j, road1 in enumerate(road_data):
    #         if road0.name == road1.name:
    #             continue
    #         par_offset(road0, road1)
    # print "par offset"

    for road in road_data:
        par_simplify(road)

    # 再做divide前需要清空
    for road in road_data:
        road.cross_list = []
    for i, road0 in enumerate(road_data):
        for j, road1 in enumerate(road_data):
            if road0.name == road1.name:
                continue
            if i < j:
                par_divide(road0, road1)

    for road in road_data:
        par_insert_cross(road)

    for road in road_data:
        par_check(road)

    save_road2model('./road_main/par0.txt', road_data)
    print "par0"
Exemplo n.º 12
0
def check():
    road_data = load_model2road('./road_new/center.txt')
    for road in road_data:
        center_dup(road)
    save_road2model('./road_new/center1.txt', road_data)
Exemplo n.º 13
0
def center0():
    """
    中心线的优化,切分
    :return:
    """
    center_road = load_model2road('./road/center.txt')

    # 合并平行连接的道路
    for i, road0 in enumerate(center_road):
        for j, road1 in enumerate(center_road):
            if j < i:
                center_merge(road0, road1)
    # 交叉点
    for i, road0 in enumerate(center_road):
        for j, road1 in enumerate(center_road):
            if i != j and road_near(road0, road1):
                try:
                    center_cross(road0, road1)
                except ZeroDivisionError:
                    print road0.name, road1.name
    # 预防多插点
    for road in center_road:
        center_dup(road)
    for i, road0 in enumerate(center_road):
        for j, road1 in enumerate(center_road):
            if j < i and road_near(road0, road1):
                try:
                    center_divide(road0, road1)
                except ZeroDivisionError:
                    print road0.name, road1.name
    print "divide 1"

    # 端点落到道路
    for i, road0 in enumerate(center_road):
        for j, road1 in enumerate(center_road):
            if i != j and road_near(road0, road1):
                center_offset(road0, road1)
    print "center offset"
    for road in center_road:
        center_simplify(road)
    save_road2model('./road/center0.txt', center_road)
    # 为防止精度不必要的损失,在一个程序内完成

    for road in center_road:
        road.cross_list = []
    for i, road0 in enumerate(center_road):
        for j, road1 in enumerate(center_road):
            if i < j and road_near(road0, road1):
                center_divide(road0, road1)
    print "divide 2"

    for road in center_road:
        center_insert_cross(road)
    save_road2model('./road/center01.txt', center_road)

    new_center_road = []
    for road in center_road:
        new_center_road.extend(center_split(road))

    for i, road in enumerate(new_center_road):
        road.set_rid(i)

    save_road2model('./road/center1.txt', new_center_road)
Exemplo n.º 14
0
# -*- coding: utf-8 -*-
# @Time    : 2018/9/30 14:56
# @Author  :
# @简介    : 计算拓扑关系
# @File    : topo.py

import cx_Oracle

from refineMap import load_model2road

conn = cx_Oracle.connect('hz/[email protected]/orcl')
cursor = conn.cursor()
sql = "insert into tb_road_topo values(:1, :2)"
road_list = load_model2road('./road/10_offset/par0.txt')
tup_list = []
for i, road0 in enumerate(road_list):
    for j, road1 in enumerate(road_list):
        et0, bt0, et1, bt1 = road0.point_list[-1], \
                             road0.point_list[0], road1.point_list[-1], road1.point_list[0]
        if et0 == bt1 or bt0 == et1:
            tup = (road0.rid, road1.rid)
            tup_list.append(tup)
    for cross in road0.cross_list:
        rid1 = cross['name']
        tup = (road0.rid, rid1)
        tup_list.append(tup)
cursor.executemany(sql, tup_list)
conn.commit()
cursor.close()
conn.close()
Exemplo n.º 15
0
def par():
    PAR = 40
    road_data = load_model2road('./road_new/center1.txt')
    par_road = []
    # road_index = 0
    for i, road in enumerate(road_data):
        name, point_list = road.name, road.point_list
        rid = road.rid
        last_pt = None
        road0, road1 = Road(name, 0, rid * 2), Road(name, 0, rid * 2 + 1)
        road0.set_grid_set(road.grid_set)
        road1.set_grid_set(road.grid_set)
        # road_index += 2
        seg_list0, seg_list1 = [], []
        for pt in point_list:
            if last_pt is not None:
                # 获取两条平移线段
                seg0, seg1 = get_parallel(last_pt, pt, PAR)
                seg_list0.append(seg0)
                seg1.set_invert()
                seg_list1.append(seg1)
            last_pt = pt
        # 计算线段之间的交点
        last_seg = None
        for j, seg in enumerate(seg_list0):
            if last_seg is None:
                road0.add_point(seg.begin_point)
            else:
                _, px, py = get_cross_point(last_seg, seg)
                if px is None:  # 平行
                    road0.add_point(seg.begin_point)
                else:
                    cp = Point(px, py)
                    road0.add_point(cp)
            last_seg = seg
        road0.add_point(last_seg.end_point)

        last_seg = None
        for seg in reversed(seg_list1):
            if last_seg is None:
                road1.add_point(seg.begin_point)
            else:
                _, px, py = get_cross_point(last_seg, seg)
                if px is None:  # 平行
                    road1.add_point(seg.begin_point)
                else:
                    cp = Point(px, py)
                    road1.add_point(cp)
            last_seg = seg
        road1.add_point(last_seg.end_point)
        # 并生成线段
        road0.gene_segment()
        road1.gene_segment()

        par_road.append(road0)
        par_road.append(road1)

    # for test
    # save_par('./road/par_0.txt', par_road)

    # 端点处有merge的可能
    for i, road0 in enumerate(par_road):
        for j, road1 in enumerate(par_road):
            if i < j and road_near(road0, road1):
                par_merge(road0, road1)

    # for road in par_road:
    #     par_check(road)

    save_par('./road_new/par.txt', par_road)