
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import networkx as nx
import math
from itertools import tee
import pickle
from numpy import Inf, Infinity, inf
from database.database import DB
import pandas as pd
from haversine import haversine
import time
import pandas as pd
import os
paths= os.getcwd()
def dist(a, b):
(x1, y1) = a
(x2, y2) = b
return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
def swith_xy(tuples):
x,y=tuples
return (y,x)
def pairwise( iterable ):
"""Returns an iterable access binary tuple
s -> (s0,s1), (s1,s2), (s2, s3), ..."""
a, b = tee( iterable )
next(b, None)
return zip(a, b)
class path_finder():
def __init__(self):
start_time=time.time()
self.db=DB()
with open(paths + '\\navigation_model\\OSM_gpickle.gpickle', 'rb') as f:
self.G = pickle.load(f)
#self.G=nx.read_gpickle(paths + '\\navigation_model\\OSM_gpickle.gpickle')
print("done")
print(time.time()-start_time)
def get_trip(self,dest1,dest2):
start_time=time.time()
dest1=swith_xy(self.db.db_get_dest(dest1))
dest2=swith_xy(self.db.db_get_dest(dest2))
value=0.0001
start_near_nodes=[]
while start_near_nodes == []:
value=value*10
start_near_nodes=self.db.db_get_near_node(dest1[1],dest1[0],value)
else:
start_near_nodes=self.db.db_get_near_node(dest1[1],dest1[0],value)
nn_start = None
nn_end = None
start_delta = float("inf")
end_delta = float("inf")
for n in start_near_nodes:
s_dist = haversine(dest1, n)
if s_dist < start_delta :
nn_start = n
start_delta = s_dist
value=0.0001
end_near_nodes=[]
while end_near_nodes==[]:
value=value*10
self.db.db_get_near_node(dest2[1],dest2[0],value)
end_near_nodes=self.db.db_get_near_node(dest2[1],dest2[0],value)
for n in end_near_nodes:
e_dist = haversine(dest2, n)
if e_dist < end_delta :
nn_end = n
end_delta = e_dist
path = list(nx.astar_path(self.G,nn_start,nn_end,heuristic=dist,weight='length'))
return path
def get_trip_2(self,dest1_x,dest1_y,dest2,not_in_list):
dest1=(float(dest1_x),float(dest1_y))
dest2=swith_xy(self.db.db_get_dest(dest2))
start_time=time.time()
value=0.0001
start_near_nodes=[]
while start_near_nodes == [] and len(start_near_nodes)<2:
value=value*10
start_near_nodes=self.db.db_get_near_node(dest1[1],dest1[0],value)
else:
start_near_nodes=self.db.db_get_near_node(dest1[1],dest1[0],value)
nn_start = None
nn_end = None
start_delta = float("inf")
end_delta = float("inf")
for n in start_near_nodes:
s_dist = haversine(dest1, n)
if s_dist < start_delta :
if n not in not_in_list:
nn_start = n
start_delta = s_dist
else:
continue
value=0.0001
end_near_nodes=[]
while end_near_nodes == [] and len(end_near_nodes)<2:
value=value*10
self.db.db_get_near_node(dest2[1],dest2[0],value)
end_near_nodes=self.db.db_get_near_node(dest2[1],dest2[0],value)
for n in end_near_nodes:
e_dist = haversine(dest2, n)
if e_dist < end_delta :
if n not in not_in_list:
nn_end = n
end_delta = e_dist
else:
continue
path = list(nx.astar_path(self.G,nn_start,nn_end,heuristic=dist,weight='length'))
return path
def get_dest(self, dest1):
dest1=swith_xy(self.db.db_get_address(dest1))
return dest1
# print("출력!!!!!!!!!!!!")
# # path_finder 클래스의 인스턴스를 생성
# path_finder_instance = path_finder()
# not_in_list=[]
# # get_trip_2() 메서드를 호출할 때 인스턴스를 통해 호출
# result = path_finder_instance.get_trip_2(35.8260157, 128.7560105, '경상북도 영덕군 남정면 산정로 159-54', not_in_list)
# print(result)