Example #1
0
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)
Example #2
0
 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"]))
Example #3
0
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')