diff --git a/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb b/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
index 083bef383..fbb8e15b6 100644
--- a/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
+++ b/Analysis/0411_unp-left_p-right-uturn/0415_matching.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -17,7 +17,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
"metadata": {},
"outputs": [
{
@@ -46,7 +46,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -285,7 +285,7 @@
"[108 rows x 12 columns]"
]
},
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -296,14 +296,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 22,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
@@ -328,1073 +321,289 @@
"
\n",
" | \n",
" inter_no | \n",
- " node_id | \n",
+ " phase_no | \n",
+ " ring_type | \n",
" move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
" inc_dire | \n",
" out_dire | \n",
+ " inc_angle | \n",
+ " out_angle | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
+ " node_id | \n",
+ " turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
- " 0 | \n",
- " 175 | \n",
- " i0 | \n",
- " 8 | \n",
- " 179 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571542797_02 | \n",
- " 571500487_01 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 175 | \n",
- " i0 | \n",
- " 4 | \n",
- " 001 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " -571500487_01 | \n",
- " 571542797_02 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " i0 | \n",
- " 7 | \n",
- " 001 | \n",
- " 090 | \n",
- " 북 | \n",
- " 동 | \n",
- " -571500487_01 | \n",
- " 571545870_01 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 175 | \n",
- " i0 | \n",
- " 3 | \n",
- " 179 | \n",
- " 270 | \n",
- " 남 | \n",
- " 서 | \n",
- " -571542797_02 | \n",
- " 571510153_01 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 175 | \n",
- " i0 | \n",
+ " 80 | \n",
+ " 202 | \n",
+ " 1 | \n",
+ " A | \n",
" 6 | \n",
- " 090 | \n",
- " 270 | \n",
" 동 | \n",
" 서 | \n",
- " 571545870_02 | \n",
- " 571510153_01 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 175 | \n",
- " i0 | \n",
- " 1 | \n",
" 090 | \n",
- " 180 | \n",
- " 동 | \n",
- " 남 | \n",
- " 571545870_02 | \n",
- " 571542797_02 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 175 | \n",
- " i0 | \n",
- " 5 | \n",
" 270 | \n",
- " 000 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571510153_02 | \n",
- " 571500487_01 | \n",
+ " 571510152_02 | \n",
+ " -571510152_01 | \n",
+ " i9 | \n",
+ " straight | \n",
"
\n",
" \n",
- " 7 | \n",
- " 175 | \n",
- " i0 | \n",
+ " 81 | \n",
+ " 202 | \n",
+ " 1 | \n",
+ " B | \n",
" 2 | \n",
- " 270 | \n",
- " 090 | \n",
" 서 | \n",
" 동 | \n",
- " 571510153_02 | \n",
- " 571545870_01 | \n",
+ " 270 | \n",
+ " 090 | \n",
+ " 571510152_01 | \n",
+ " 571510152_01.65 | \n",
+ " i9 | \n",
+ " straight | \n",
"
\n",
" \n",
"\n",
""
],
"text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "0 175 i0 8 179 000 남 북 \n",
- "1 175 i0 4 001 180 북 남 \n",
- "2 175 i0 7 001 090 북 동 \n",
- "3 175 i0 3 179 270 남 서 \n",
- "4 175 i0 6 090 270 동 서 \n",
- "5 175 i0 1 090 180 동 남 \n",
- "6 175 i0 5 270 000 서 북 \n",
- "7 175 i0 2 270 090 서 동 \n",
+ " inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
+ "80 202 1 A 6 동 서 090 \n",
+ "81 202 1 B 2 서 동 270 \n",
"\n",
- " inc_edge_id out_edge_id \n",
- "0 -571542797_02 571500487_01 \n",
- "1 -571500487_01 571542797_02 \n",
- "2 -571500487_01 571545870_01 \n",
- "3 -571542797_02 571510153_01 \n",
- "4 571545870_02 571510153_01 \n",
- "5 571545870_02 571542797_02 \n",
- "6 571510153_02 571500487_01 \n",
- "7 571510153_02 571545870_01 "
+ " out_angle inc_edge_id out_edge_id node_id turn_type \n",
+ "80 270 571510152_02 -571510152_01 i9 straight \n",
+ "81 090 571510152_01 571510152_01.65 i9 straight "
]
},
+ "execution_count": 10,
"metadata": {},
- "output_type": "display_data"
- },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.match6[self.match6.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "self.match7 = self.match6.copy()\n",
+ "self.match7 = self.match7[['inter_no', 'node_id', 'move_no', 'inc_angle', 'out_angle', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id']]\n",
+ "# parent_id = self.parent_ids[1]\n",
+ "\n",
+ "for parent_id in self.parent_ids:\n",
+ " m7 = self.match7[self.match7.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
+ " m6 = self.match6[self.match6.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
+ " inc_angles = [int(angle) for angle in np.unique(m7.inc_angle.values)]\n",
+ " out_angles = [int(angle) for angle in np.unique(m7.out_angle.values)]\n",
+ " # print(parent_id)\n",
+ " # display(m6)\n",
+ " # display(m7)\n",
+ " # print(inc_angles)\n",
+ " # print(out_angles)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# (1) 가능한 (진입방향, 진출방향) 목록 \n",
+ "flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
+ "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
+ "pdires = {}\n",
+ "for node_id in self.parent_ids:\n",
+ " dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten()\n",
+ " dires = {dire for dire in dires if type(dire)==str}\n",
+ " pdires[node_id] = dires\n",
+ "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
+ "inc2id = {}\n",
+ "for node_id in self.parent_ids:\n",
+ " for inc_dire in pdires[node_id]:\n",
+ " df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)]\n",
+ " inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
+ "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
+ "out2id = {}\n",
+ "for node_id in self.parent_ids:\n",
+ " for out_dire in pdires[node_id]:\n",
+ " df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)]\n",
+ " out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0]\n",
+ "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
+ "pflow = {}\n",
+ "for node_id in self.parent_ids:\n",
+ " pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "[1, 90, 179, 270]\n",
- "[0, 90, 180, 270]\n"
+ "i0\n"
]
},
{
"data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 16 | \n",
- " 176 | \n",
- " i1 | \n",
- " 8 | \n",
- " 180 | \n",
- " 356 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571542810_01 | \n",
- " -571542797_02.99 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 176 | \n",
- " i1 | \n",
- " 4 | \n",
- " 359 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571542797_02.99 | \n",
- " 571542810_01 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 176 | \n",
- " i1 | \n",
- " 8 | \n",
- " 180 | \n",
- " 356 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571542810_01 | \n",
- " -571542797_02.99 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 176 | \n",
- " i1 | \n",
- " 3 | \n",
- " 180 | \n",
- " 270 | \n",
- " 남 | \n",
- " 서 | \n",
- " -571542810_01 | \n",
- " 571543469_01 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 176 | \n",
- " i1 | \n",
- " 5 | \n",
- " 270 | \n",
- " 356 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571543469_02 | \n",
- " -571542797_02.99 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
"text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "16 176 i1 8 180 356 남 북 \n",
- "17 176 i1 4 359 180 북 남 \n",
- "18 176 i1 8 180 356 남 북 \n",
- "19 176 i1 3 180 270 남 서 \n",
- "20 176 i1 5 270 356 서 북 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "16 -571542810_01 -571542797_02.99 \n",
- "17 571542797_02.99 571542810_01 \n",
- "18 -571542810_01 -571542797_02.99 \n",
- "19 -571542810_01 571543469_01 \n",
- "20 571543469_02 -571542797_02.99 "
+ "{1: '571545870_02',\n",
+ " 2: '571510153_02',\n",
+ " 3: '-571542797_02',\n",
+ " 4: '-571500487_01',\n",
+ " 5: '571510153_02',\n",
+ " 6: '571545870_02',\n",
+ " 7: '-571500487_01',\n",
+ " 8: '-571542797_02',\n",
+ " 9: '-571500487_01',\n",
+ " 10: '571510153_02',\n",
+ " 11: '571545870_02',\n",
+ " 12: '-571500487_01',\n",
+ " 13: '571510153_02',\n",
+ " 14: '-571500487_01',\n",
+ " 15: '-571500487_01',\n",
+ " 16: '571545870_02'}"
]
},
"metadata": {},
"output_type": "display_data"
},
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[180, 270, 359]\n",
- "[180, 270, 356]\n"
- ]
- },
{
"data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 22 | \n",
- " 177 | \n",
- " i2 | \n",
- " 8 | \n",
- " 179 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571542809_01 | \n",
- " 571542811_01 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 177 | \n",
- " i2 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571542811_02 | \n",
- " 571542809_01 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "22 177 i2 8 179 000 남 북 \n",
- "23 177 i2 4 000 180 북 남 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "22 -571542809_01 571542811_01 \n",
- "23 571542811_02 571542809_01 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0, 179]\n",
- "[0, 180]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 38 | \n",
- " 178 | \n",
- " i3 | \n",
- " 8 | \n",
- " 180 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " 571540304_02 | \n",
- " 571556450_01 | \n",
- "
\n",
- " \n",
- " 39 | \n",
- " 178 | \n",
- " i3 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571556450_02 | \n",
- " 571540304_01 | \n",
- "
\n",
- " \n",
- " 40 | \n",
- " 178 | \n",
- " i3 | \n",
- " 7 | \n",
- " 000 | \n",
- " 090 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571556450_02 | \n",
- " 571500475_01 | \n",
- "
\n",
- " \n",
- " 41 | \n",
- " 178 | \n",
- " i3 | \n",
- " 3 | \n",
- " 180 | \n",
- " 270 | \n",
- " 남 | \n",
- " 서 | \n",
- " 571540304_02 | \n",
- " 571540303_01 | \n",
- "
\n",
- " \n",
- " 42 | \n",
- " 178 | \n",
- " i3 | \n",
- " 5 | \n",
- " 270 | \n",
- " 000 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571540303_02.21 | \n",
- " 571556450_01 | \n",
- "
\n",
- " \n",
- " 43 | \n",
- " 178 | \n",
- " i3 | \n",
- " 2 | \n",
- " 270 | \n",
- " 090 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571540303_02.21 | \n",
- " 571500475_01 | \n",
- "
\n",
- " \n",
- " 44 | \n",
- " 178 | \n",
- " i3 | \n",
- " 6 | \n",
- " 090 | \n",
- " 270 | \n",
- " 동 | \n",
- " 서 | \n",
- " -571500475_01 | \n",
- " 571540303_01 | \n",
- "
\n",
- " \n",
- " 45 | \n",
- " 178 | \n",
- " i3 | \n",
- " 1 | \n",
- " 090 | \n",
- " 180 | \n",
- " 동 | \n",
- " 남 | \n",
- " -571500475_01 | \n",
- " 571540304_01 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "38 178 i3 8 180 000 남 북 \n",
- "39 178 i3 4 000 180 북 남 \n",
- "40 178 i3 7 000 090 북 동 \n",
- "41 178 i3 3 180 270 남 서 \n",
- "42 178 i3 5 270 000 서 북 \n",
- "43 178 i3 2 270 090 서 동 \n",
- "44 178 i3 6 090 270 동 서 \n",
- "45 178 i3 1 090 180 동 남 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "38 571540304_02 571556450_01 \n",
- "39 571556450_02 571540304_01 \n",
- "40 571556450_02 571500475_01 \n",
- "41 571540304_02 571540303_01 \n",
- "42 571540303_02.21 571556450_01 \n",
- "43 571540303_02.21 571500475_01 \n",
- "44 -571500475_01 571540303_01 \n",
- "45 -571500475_01 571540304_01 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0, 90, 180, 270]\n",
- "[0, 90, 180, 270]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 92 | \n",
- " 210 | \n",
- " i6 | \n",
- " 6 | \n",
- " 090 | \n",
- " 270 | \n",
- " 동 | \n",
- " 서 | \n",
- " -571542115_01 | \n",
- " 571500535_01 | \n",
- "
\n",
- " \n",
- " 94 | \n",
- " 210 | \n",
- " i6 | \n",
- " 5 | \n",
- " 270 | \n",
- " 000 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571500535_02.18 | \n",
- " 571511538_01 | \n",
- "
\n",
- " \n",
- " 95 | \n",
- " 210 | \n",
- " i6 | \n",
- " 2 | \n",
- " 270 | \n",
- " 090 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571500535_02.18 | \n",
- " 571542115_01 | \n",
- "
\n",
- " \n",
- " 96 | \n",
- " 210 | \n",
- " i6 | \n",
- " 7 | \n",
- " 000 | \n",
- " 090 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571511538_02.121 | \n",
- " 571542115_01 | \n",
- "
\n",
- " \n",
- " 97 | \n",
- " 210 | \n",
- " i6 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571511538_02.121 | \n",
- " 571500585_01 | \n",
- "
\n",
- " \n",
- " 98 | \n",
- " 210 | \n",
- " i6 | \n",
- " 8 | \n",
- " 180 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " 571500585_02 | \n",
- " 571511538_01 | \n",
- "
\n",
- " \n",
- " 99 | \n",
- " 210 | \n",
- " i6 | \n",
- " 3 | \n",
- " 180 | \n",
- " 270 | \n",
- " 남 | \n",
- " 서 | \n",
- " 571500585_02 | \n",
- " 571500535_01 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "92 210 i6 6 090 270 동 서 \n",
- "94 210 i6 5 270 000 서 북 \n",
- "95 210 i6 2 270 090 서 동 \n",
- "96 210 i6 7 000 090 북 동 \n",
- "97 210 i6 4 000 180 북 남 \n",
- "98 210 i6 8 180 000 남 북 \n",
- "99 210 i6 3 180 270 남 서 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "92 -571542115_01 571500535_01 \n",
- "94 571500535_02.18 571511538_01 \n",
- "95 571500535_02.18 571542115_01 \n",
- "96 571511538_02.121 571542115_01 \n",
- "97 571511538_02.121 571500585_01 \n",
- "98 571500585_02 571511538_01 \n",
- "99 571500585_02 571500535_01 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0, 90, 180, 270]\n",
- "[0, 90, 180, 270]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 84 | \n",
- " 206 | \n",
- " i7 | \n",
- " 8 | \n",
- " 180 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571511538_02 | \n",
- " 571542073_02 | \n",
- "
\n",
- " \n",
- " 85 | \n",
- " 206 | \n",
- " i7 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571542073_01 | \n",
- " 571511538_02 | \n",
- "
\n",
- " \n",
- " 88 | \n",
- " 206 | \n",
- " i7 | \n",
- " 8 | \n",
- " 180 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571511538_02 | \n",
- " 571542073_02 | \n",
- "
\n",
- " \n",
- " 89 | \n",
- " 206 | \n",
- " i7 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571542073_01 | \n",
- " 571511538_02 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "84 206 i7 8 180 000 남 북 \n",
- "85 206 i7 4 000 180 북 남 \n",
- "88 206 i7 8 180 000 남 북 \n",
- "89 206 i7 4 000 180 북 남 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "84 -571511538_02 571542073_02 \n",
- "85 571542073_01 571511538_02 \n",
- "88 -571511538_02 571542073_02 \n",
- "89 571542073_01 571511538_02 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0, 180]\n",
- "[0, 180]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 70 | \n",
- " 201 | \n",
- " i8 | \n",
- " 8 | \n",
- " 180 | \n",
- " 000 | \n",
- " 남 | \n",
- " 북 | \n",
- " -571500569_01 | \n",
- " 571500583_02 | \n",
- "
\n",
- " \n",
- " 71 | \n",
- " 201 | \n",
- " i8 | \n",
- " 3 | \n",
- " 180 | \n",
- " 270 | \n",
- " 남 | \n",
- " 서 | \n",
- " -571500569_01 | \n",
- " 571500618_01 | \n",
- "
\n",
- " \n",
- " 72 | \n",
- " 201 | \n",
- " i8 | \n",
- " 5 | \n",
- " 270 | \n",
- " 000 | \n",
- " 서 | \n",
- " 북 | \n",
- " 571500618_02 | \n",
- " 571500583_02 | \n",
- "
\n",
- " \n",
- " 73 | \n",
- " 201 | \n",
- " i8 | \n",
- " 2 | \n",
- " 270 | \n",
- " 090 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571500618_02 | \n",
- " 571500617_01 | \n",
- "
\n",
- " \n",
- " 74 | \n",
- " 201 | \n",
- " i8 | \n",
- " 6 | \n",
- " 090 | \n",
- " 270 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571500617_02 | \n",
- " 571500618_01 | \n",
- "
\n",
- " \n",
- " 75 | \n",
- " 201 | \n",
- " i8 | \n",
- " 2 | \n",
- " 270 | \n",
- " 090 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571500618_02 | \n",
- " 571500617_01 | \n",
- "
\n",
- " \n",
- " 76 | \n",
- " 201 | \n",
- " i8 | \n",
- " 6 | \n",
- " 090 | \n",
- " 270 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571500617_02 | \n",
- " 571500618_01 | \n",
- "
\n",
- " \n",
- " 77 | \n",
- " 201 | \n",
- " i8 | \n",
- " 1 | \n",
- " 090 | \n",
- " 180 | \n",
- " 동 | \n",
- " 남 | \n",
- " 571500617_02 | \n",
- " 571500569_01 | \n",
- "
\n",
- " \n",
- " 78 | \n",
- " 201 | \n",
- " i8 | \n",
- " 7 | \n",
- " 000 | \n",
- " 090 | \n",
- " 북 | \n",
- " 동 | \n",
- " 571500583_01 | \n",
- " 571500617_01 | \n",
- "
\n",
- " \n",
- " 79 | \n",
- " 201 | \n",
- " i8 | \n",
- " 4 | \n",
- " 000 | \n",
- " 180 | \n",
- " 북 | \n",
- " 남 | \n",
- " 571500583_01 | \n",
- " 571500569_01 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "70 201 i8 8 180 000 남 북 \n",
- "71 201 i8 3 180 270 남 서 \n",
- "72 201 i8 5 270 000 서 북 \n",
- "73 201 i8 2 270 090 서 동 \n",
- "74 201 i8 6 090 270 동 서 \n",
- "75 201 i8 2 270 090 서 동 \n",
- "76 201 i8 6 090 270 동 서 \n",
- "77 201 i8 1 090 180 동 남 \n",
- "78 201 i8 7 000 090 북 동 \n",
- "79 201 i8 4 000 180 북 남 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "70 -571500569_01 571500583_02 \n",
- "71 -571500569_01 571500618_01 \n",
- "72 571500618_02 571500583_02 \n",
- "73 571500618_02 571500617_01 \n",
- "74 571500617_02 571500618_01 \n",
- "75 571500618_02 571500617_01 \n",
- "76 571500617_02 571500618_01 \n",
- "77 571500617_02 571500569_01 \n",
- "78 571500583_01 571500617_01 \n",
- "79 571500583_01 571500569_01 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0, 90, 180, 270]\n",
- "[0, 90, 180, 270]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " inter_no | \n",
- " node_id | \n",
- " move_no | \n",
- " inc_angle | \n",
- " out_angle | \n",
- " inc_dire | \n",
- " out_dire | \n",
- " inc_edge_id | \n",
- " out_edge_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 80 | \n",
- " 202 | \n",
- " i9 | \n",
- " 6 | \n",
- " 090 | \n",
- " 270 | \n",
- " 동 | \n",
- " 서 | \n",
- " 571510152_02 | \n",
- " -571510152_01 | \n",
- "
\n",
- " \n",
- " 81 | \n",
- " 202 | \n",
- " i9 | \n",
- " 2 | \n",
- " 270 | \n",
- " 090 | \n",
- " 서 | \n",
- " 동 | \n",
- " 571510152_01 | \n",
- " 571510152_01.65 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
"text/plain": [
- " inter_no node_id move_no inc_angle out_angle inc_dire out_dire \\\n",
- "80 202 i9 6 090 270 동 서 \n",
- "81 202 i9 2 270 090 서 동 \n",
- "\n",
- " inc_edge_id out_edge_id \n",
- "80 571510152_02 -571510152_01 \n",
- "81 571510152_01 571510152_01.65 "
+ "{1: '571542797_02',\n",
+ " 2: '571545870_01',\n",
+ " 3: '571510153_01',\n",
+ " 4: '571542797_02',\n",
+ " 5: '571500487_01',\n",
+ " 6: '571510153_01',\n",
+ " 7: '571545870_01',\n",
+ " 8: '571500487_01',\n",
+ " 9: '571545870_01',\n",
+ " 10: '571500487_01',\n",
+ " 11: '571510153_01',\n",
+ " 12: '571545870_01',\n",
+ " 13: '571500487_01',\n",
+ " 14: '571510153_01',\n",
+ " 15: '571500487_01',\n",
+ " 16: '571500487_01'}"
]
},
"metadata": {},
"output_type": "display_data"
- },
+ }
+ ],
+ "source": [
+ "p2am = dict() # parent id to a list of aligned movement numbers\n",
+ "for parent_id in self.parent_ids:\n",
+ " pnema = self.nema[self.nema.inc_dire.isin(pdires[parent_id]) & self.nema.out_dire.isin(pdires[parent_id])]\n",
+ " p2am[parent_id] = list(pnema.move_no)\n",
+ "\n",
+ "dire2vec = dict() # direction to unit vector\n",
+ "theta = np.pi/2\n",
+ "for dire in self.dires:\n",
+ " dire2vec[dire] = np.array([np.cos(theta), np.sin(theta)])\n",
+ " theta -= np.pi/4\n",
+ "\n",
+ "plain_move_nos = list(range(1,17)) # plain movement numbers\n",
+ "\n",
+ "p2pm2inc_edge_id = dict() # parent id to pm2inc_edge_id\n",
+ "p2pm2out_edge_id = dict() # parent id to pm2out_edge_id\n",
+ "for parent_id in self.parent_ids:\n",
+ " pm2inc_edge_id = dict() # plain movement to incoming edge id\n",
+ " pm2out_edge_id = dict() # plain movement to outgoing edge id\n",
+ " for pm in plain_move_nos:\n",
+ " row = self.nema[self.nema.move_no==pm].iloc[0]\n",
+ " inc_dire = row.inc_dire\n",
+ " out_dire = row.out_dire\n",
+ " inc_vec_true = dire2vec[inc_dire]\n",
+ " out_vec_true = dire2vec[out_dire]\n",
+ "\n",
+ " node = self.net.getNode(parent_id)\n",
+ " # 교차로의 모든 (from / to) edges\n",
+ " inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges\n",
+ " out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges\n",
+ " # 교차로의 모든 (from / to) unit vector\n",
+ " inc_vecs = []\n",
+ " for inc_edge in inc_edges:\n",
+ " start = inc_edge.getShape()[-1]\n",
+ " end = inc_edge.getShape()[-2]\n",
+ " inc_vec = np.array(end) - np.array(start)\n",
+ " inc_vec = inc_vec / (inc_vec ** 2).sum() ** 0.5\n",
+ " inc_vecs.append(inc_vec)\n",
+ " out_vecs = []\n",
+ " for out_edge in out_edges:\n",
+ " start = out_edge.getShape()[0]\n",
+ " end = out_edge.getShape()[1]\n",
+ " out_vec = np.array(end) - np.array(start)\n",
+ " out_vec = out_vec / (out_vec ** 2).sum() ** 0.5\n",
+ " out_vecs.append(out_vec)\n",
+ " # 매칭 엣지 반환\n",
+ " inc_index = np.array([np.dot(inc_vec, inc_vec_true) for inc_vec in inc_vecs]).argmax()\n",
+ " out_index = np.array([np.dot(out_vec, out_vec_true) for out_vec in out_vecs]).argmax()\n",
+ " inc_edge_id = inc_edges[inc_index].getID()\n",
+ " out_edge_id = out_edges[out_index].getID()\n",
+ " pm2inc_edge_id[pm] = inc_edge_id\n",
+ " pm2out_edge_id[pm] = out_edge_id\n",
+ " p2pm2inc_edge_id[parent_id] = pm2inc_edge_id\n",
+ " p2pm2out_edge_id[parent_id] = pm2out_edge_id\n",
+ "\n",
+ "parent_id = self.parent_ids[0]\n",
+ "print(parent_id)\n",
+ "display(p2pm2inc_edge_id[parent_id])\n",
+ "display(p2pm2out_edge_id[parent_id])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plain_move_nos = list(range(1,17)) # plain movement numbers\n",
+ "p2pm2inc_edge_id = dict() # parent id to pm2inc_edge_id\n",
+ "p2pm2out_edge_id = dict() # parent id to pm2out_edge_id\n",
+ "for parent_id in self.parent_ids:\n",
+ " pm2inc_angle = dict()\n",
+ " for pm in plain_move_nos:\n",
+ " row = self.nema[self.nema.move_no==pm].iloc[0]\n",
+ " # inc_dire = row.\n",
+ "# plain movement number(1-16) to (inc_angle, out_angle)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "[90, 270]\n",
- "[90, 270]\n"
+ "[('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북'), ('북동', '남동'), ('남서', '북동'), ('남동', '남서'), ('북서', '남동'), ('남서', '북서'), ('북동', '남서'), ('북서', '북동'), ('남동', '북서')]\n",
+ "{'i0': {'북', '남', '동', '서'}, 'i1': {'북', '남', '서'}, 'i2': {'북', '남'}, 'i3': {'북', '남', '동', '서'}, 'i6': {'북', '남', '동', '서'}, 'i7': {'북', '남'}, 'i8': {'북', '남', '서', '동'}, 'i9': {'동', '서'}}\n",
+ "{('i0', '북'): '-571500487_01', ('i0', '남'): '-571542797_02', ('i0', '동'): '571545870_02', ('i0', '서'): '571510153_02', ('i1', '북'): '571542797_02.99', ('i1', '남'): '-571542810_01', ('i1', '서'): '571543469_02', ('i2', '북'): '571542811_02', ('i2', '남'): '-571542809_01', ('i3', '북'): '571556450_02', ('i3', '남'): '571540304_02', ('i3', '동'): '-571500475_01', ('i3', '서'): '571540303_02.21', ('i6', '북'): '571511538_02.121', ('i6', '남'): '571500585_02', ('i6', '동'): '-571542115_01', ('i6', '서'): '571500535_02.18', ('i7', '북'): '571542073_01', ('i7', '남'): '-571511538_02', ('i8', '북'): '571500583_01', ('i8', '남'): '-571500569_01', ('i8', '서'): '571500618_02', ('i8', '동'): '571500617_02', ('i9', '동'): '571510152_02', ('i9', '서'): '571510152_01'}\n",
+ "{('i0', '북'): '571500487_01', ('i0', '남'): '571542797_02', ('i0', '동'): '571545870_01', ('i0', '서'): '571510153_01', ('i1', '북'): '-571542797_02.99', ('i1', '남'): '571542810_01', ('i1', '서'): '571543469_01', ('i2', '북'): '571542811_01', ('i2', '남'): '571542809_01', ('i3', '북'): '571556450_01', ('i3', '남'): '571540304_01', ('i3', '동'): '571500475_01', ('i3', '서'): '571540303_01', ('i6', '북'): '571511538_01', ('i6', '남'): '571500585_01', ('i6', '동'): '571542115_01', ('i6', '서'): '571500535_01', ('i7', '북'): '571542073_02', ('i7', '남'): '571511538_02', ('i8', '북'): '571500583_02', ('i8', '남'): '571500569_01', ('i8', '서'): '571500618_01', ('i8', '동'): '571500617_01', ('i9', '동'): '571510152_01.65', ('i9', '서'): '-571510152_01'}\n",
+ "{'i0': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i1': [('남', '서'), ('북', '남'), ('서', '북'), ('남', '북')], 'i2': [('북', '남'), ('남', '북')], 'i3': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i6': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i7': [('북', '남'), ('남', '북')], 'i8': [('동', '남'), ('서', '동'), ('남', '서'), ('북', '남'), ('서', '북'), ('동', '서'), ('북', '동'), ('남', '북')], 'i9': [('서', '동'), ('동', '서')]}\n"
]
}
],
"source": [
- "self.match7 = self.match6.copy()\n",
- "self.match7 = self.match7[['inter_no', 'node_id', 'move_no', 'inc_angle', 'out_angle', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id']]\n",
- "# parent_id = self.parent_ids[1]\n",
- "\n",
- "for parent_id in self.parent_ids:\n",
- " m7 = self.match7[self.match7.node_id==parent_id].dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
- " display(m7)\n",
- " inc_angles = [int(angle) for angle in np.unique(m7.inc_angle.values)]\n",
- " out_angles = [int(angle) for angle in np.unique(m7.out_angle.values)]\n",
- " print(inc_angles)\n",
- " print(out_angles)"
+ "print(flows)\n",
+ "print(pdires)\n",
+ "print(inc2id)\n",
+ "print(out2id)\n",
+ "print(pflow)"
]
},
{
@@ -1404,33 +613,6 @@
"outputs": [],
"source": [
"\n",
- "# parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
- "# child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
- "\n",
- "# (1) 가능한 (진입방향, 진출방향) 목록 \n",
- "flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()\n",
- "# (2) 각 교차로별 방향 목록 : pdires (possible directions)\n",
- "pdires = {}\n",
- "for node_id in self.parent_ids:\n",
- " dires = self.match7[self.match7.node_id == node_id][['inc_dire','out_dire']].values.flatten()\n",
- " dires = {dire for dire in dires if type(dire)==str}\n",
- " pdires[node_id] = dires\n",
- "# (3) 각 (교차로, 진입방향) 별 진입id 목록 : inc2id (incoming direction to incoming edge_id)\n",
- "inc2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for inc_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.inc_dire==inc_dire)]\n",
- " inc2id[(node_id, inc_dire)] = df.inc_edge_id.iloc[0]\n",
- "# (4) 각 (교차로, 진출방향) 별 진출id 목록 : out2id (outgoing direction to outgoing edge_id)\n",
- "out2id = {}\n",
- "for node_id in self.parent_ids:\n",
- " for out_dire in pdires[node_id]:\n",
- " df = self.match7[(self.match7.node_id==node_id) & (self.match7.out_dire==out_dire)]\n",
- " out2id[(node_id, out_dire)] = df.out_edge_id.iloc[0]\n",
- "# (5) 각 교차로별 가능한 (진입방향, 진출방향) 목록 : pflow (possible flows)\n",
- "pflow = {}\n",
- "for node_id in self.parent_ids:\n",
- " pflow[node_id] = [flow for flow in flows if set(flow).issubset(pdires[node_id])]\n",
"# (6) 가능한 이동류에 대하여 진입id, 진출id 배정 : matching\n",
"dires_right = ['북', '북서', '서', '남서', '남', '남동', '동', '북동'] # ex (북, 서), (서, 남) 등은 우회전 flow\n",
"self.matching = []\n",
diff --git a/Documents/1127_table_definition/table_definition_v0.8.5.xlsx b/Documents/1127_table_definition/table_definition_v0.8.5.xlsx
index 1001ed33e..81d07f1a4 100644
Binary files a/Documents/1127_table_definition/table_definition_v0.8.5.xlsx and b/Documents/1127_table_definition/table_definition_v0.8.5.xlsx differ
diff --git a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc
index 3430d562d..176ac9501 100644
Binary files a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc and b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc differ
diff --git a/Scripts/preprocess_daily.py b/Scripts/preprocess_daily.py
index bed3e4d29..6b2291dbf 100644
--- a/Scripts/preprocess_daily.py
+++ b/Scripts/preprocess_daily.py
@@ -366,11 +366,11 @@ class DailyPreprocessor():
# 교차로의 모든 (from / to) edges
inc_edges = [edge for edge in node.getIncoming() if edge.getFunction() == ''] # incoming edges
out_edges = [edge for edge in node.getOutgoing() if edge.getFunction() == ''] # outgoing edges
- # 교차로의 모든 (from / to) directions (unit vector)
+ # 교차로의 모든 (from / to) unit vector
inc_vecs = []
for inc_edge in inc_edges:
- start = inc_edge.getShape()[-2]
- end = inc_edge.getShape()[-1]
+ start = inc_edge.getShape()[-1]
+ end = inc_edge.getShape()[-2]
inc_vec = np.array(end) - np.array(start)
inc_vec = inc_vec / (inc_vec ** 2).sum() ** 0.5
inc_vecs.append(inc_vec)
@@ -386,7 +386,7 @@ class DailyPreprocessor():
inc_angle = int(row.inc_angle)
out_angle = int(row.out_angle)
# 방위각을 일반각으로 가공, 라디안 변환, 단위벡터로 변환
- inc_angle = (-90 - inc_angle) % 360
+ inc_angle = (90 - inc_angle) % 360
inc_angle = inc_angle * np.pi / 180.
inc_vec_true = np.array([np.cos(inc_angle), np.sin(inc_angle)])
out_angle = (90 - out_angle) % 360
@@ -564,8 +564,8 @@ class DailyPreprocessor():
# 2-1-7
def make_matching(self):
'''
- 각 교차로에 대하여, 가능한 모든 이동류 (1~18, 21)에 대한 진입·진출엣지ID를 지정한 테이블
- * 시차제
+ 각 교차로에 대하여, 가능한 모든 이동류 (1~16)에 대한 진입·진출엣지ID를 지정한 테이블
+ * 시차제에 대비한 테이블
컬럼명 : inter_no, move_no, inc_dire, out_dire, inc_edge_id, out_edge_id, node_id
'''
@@ -573,9 +573,6 @@ class DailyPreprocessor():
self.match7 = self.match6.copy()
self.match7 = self.match7[['inter_no', 'move_no', 'inc_dire', 'out_dire', 'inc_edge_id', 'out_edge_id', 'node_id']]
- # parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())
- # child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())
-
# (1) 가능한 (진입방향, 진출방향) 목록
flows = self.nema.dropna().apply(lambda row: (row['inc_dire'], row['out_dire']), axis=1).tolist()
# (2) 각 교차로별 방향 목록 : pdires (possible directions)