def match_coor(x): res = [] # with Network(SparkFiles.get("my_connected_path4.shp")) as network: # graph = NetworkGraph(netwk.value) # model = STMATCH(netwk.value, graph) network = Network("./data/my_connected_path4.shp") graph = NetworkGraph(network) model = STMATCH(network, graph) config = STMATCHConfig() config.k = 4 config.gps_error = 0.5 # config.radius = 0.4 config.radius = 100 config.vmax = 60 config.factor = 1.5 for traj in x: tmp = [] for item in traj[1]: y,x = float(item[4]), float(item[3]) if x>180 or x<-180 or y>80 or y<-80: continue trans_coor = utm.from_latlon(y,x, force_zone_number=49) tmp.append(str(trans_coor[0])+" "+str(trans_coor[1])) if len(tmp) == 0: continue wkt = "LINESTRING("+",".join(tmp)+")" result = model.match_wkt(wkt,config) opath = list(result.opath) x2 = list(zip(traj[1],opath)) res.append(x2) return iter(res)
def __init__(self, config_json_file): if not os.path.exists(config_json_file): raise Exception("File for {} is missing.".format(config_json_file)) with open(config_json_file) as f: data = json.load(f) if (not data.has_key("model")): raise Exception("Model is missing.") if (not data.has_key("input")): raise Exception("Input is missing.") if (not data["input"].has_key("network")): raise Exception("Network is missing.") if (not data["input"]["network"].has_key("file")): raise Exception("Network file is missing.") self.network_file = str(data["input"]["network"]["file"]) if data["input"]["network"].has_key("id"): self.network_id = str(data["input"]["network"]["id"]) else: self.network_id = "id" if data["input"]["network"].has_key("source"): self.network_source = str(data["input"]["network"]["source"]) else: self.network_source = "source" if data["input"]["network"].has_key("target"): self.network_target = str(data["input"]["network"]["target"]) else: self.network_target = "target" if str(data["model"]) == "stmatch": self.model_tag = "stmatch" self.mm_config = STMATCHConfig() if data.has_key("parameters"): if data["parameters"].has_key("k"): self.mm_config.k = data["parameters"]["k"] if data["parameters"].has_key("r"): self.mm_config.radius = data["parameters"]["r"] if data["parameters"].has_key("e"): self.mm_config.gps_error = data["parameters"]["e"] if data["parameters"].has_key("f"): self.mm_config.factor = data["parameters"]["f"] if data["parameters"].has_key("vmax"): self.mm_config.vmax = data["parameters"]["vmax"] elif (str(data["model"]) == "fmm"): self.model_tag = "fmm" if (not data["input"].has_key("ubodt")): raise Exception("Ubodt is missing.") if (not data["input"]["ubodt"].has_key("file")): raise Exception("Ubodt file is missing.") self.ubodt_file = str(data["input"]["ubodt"]["file"]) self.mm_config = FastMapMatchConfig() if data.has_key("parameters"): if data["parameters"].has_key("k"): self.mm_config.k = data["parameters"]["k"] if data["parameters"].has_key("r"): self.mm_config.radius = data["parameters"]["r"] if data["parameters"].has_key("e"): self.mm_config.gps_error = data["parameters"]["e"] else: raise Exception("Model not found for {} ".format(data["model"]))
from fmm import Network, NetworkGraph, STMATCH, STMATCHConfig network = Network("../data/edges.shp") graph = NetworkGraph(network) print graph.get_num_vertices() model = STMATCH(network, graph) wkt = "LINESTRING(0.200812146892656 2.14088983050848,1.44262005649717 2.14879943502825,3.06408898305084 2.16066384180791,3.06408898305084 2.7103813559322,3.70872175141242 2.97930790960452,4.11606638418078 2.62337570621469)" config = STMATCHConfig() config.k = 4 config.gps_error = 0.5 config.radius = 0.4 config.vmax = 30 config.factor = 1.5 result = model.match_wkt(wkt, config) print type(result) print "Opath ", list(result.opath) print "Cpath ", list(result.cpath) print "WKT ", result.mgeom.export_wkt()
print status ubodt = UBODT.read_ubodt_csv("../../data/Porto/ubodt.txt") fmm_model = FastMapMatch(network, graph, ubodt) k = 16 radius = 0.005 gps_error = 0.0005 fmm_config = FastMapMatchConfig(k, radius, gps_error) stmatch_model = STMATCH(network, graph) k = 8 gps_error = 0.0005 radius = 0.005 vmax = 0.0003 factor = 1.5 stmatch_config = STMATCHConfig(k, radius, gps_error, vmax, factor) train1000 = [] with open("../../data/train-1000.csv", "r") as csvfile: reader = csv.reader(csvfile) for line in reader: train1000.append(line[8]) #POLYLINES results = [] for t_number in range(1, 1001): gps_points = eval(train1000[t_number]) wkt = 'LINESTRING(' + ','.join( [' '.join([str(j) for j in i]) for i in gps_points]) + ')' result = fmm_model.match_wkt(wkt, fmm_config) if list(result.cpath) == []: print('stmatching')