def groupPoints(points, epsilon=150, min_samples=1) : if not points : return [] meters = [] for p in points : coords = [] coords.append(distance.haversineDistance(0, p["lat"], 0, 0)) coords.append(distance.haversineDistance(p["lng"], 0, 0, 0)) meters.append(coords) db = DBSCAN(eps=epsilon, min_samples=min_samples).fit(meters) labels = db.labels_ unique_labels = set(labels) for current_label in unique_labels : lat_sum = 0 lng_sum = 0 count = 0 for i in range((len(points))) : if labels[i] == current_label : lat_sum += points[i]["lat"] lng_sum += points[i]["lng"] count+=1 for i in range(len(points)): if labels[i]==current_label: points[i]["label"] = int(current_label) points[i]["lat"] = lat_sum/count points[i]["lng"] = lng_sum/count return points
def removeSmallSegments(segments, nb_points, min_dist) : k=0 while k <len(segments): if len(segments[k])<nb_points: total_dist=0 for i in range(1, len(segments[k])): total_dist+=distance.haversineDistance( segments[k]["longitude"][i-1], segments[k]["latitude"][i-1], segments[k]["longitude"][i], segments[k]["latitude"][i]) if total_dist<min_dist: segments.pop(k) k-=1 k+=1 return segments
def fdistance(df, i, j): return distance.haversineDistance(df["lng_mean_filt"][i], df["lat_mean_filt"][i], df["lng_mean_filt"][j], df["lat_mean_filt"][j])
def fdistance(df, i, j) : return distance.haversineDistance( df["longitude"][i], df["latitude"][i], df["longitude"][j], df["latitude"][j])
def errorDistances(data, filt_lat_name, filt_lng_name): error=[] for i in range(data['latitude'].size): error.append(distance.haversineDistance(data["longitude"][i], data["latitude"][i], data[filt_lng_name][i], data[filt_lat_name][i])) return error