def adjacency_test(country_geo1: Polygon, country_geo2: Polygon) -> bool: """Returns True if the two countries are adjacent. Takes adavantage of the properties of Polygons (shape library objects), which "know" if they intersect. """ return not country_geo1.intersection(country_geo2).is_empty
def polygonoverlap(poly1, poly2): a = (poly1[0, 0], poly1[0, 1]) b = (poly1[1, 0], poly1[1, 1]) c = (poly1[2, 0], poly1[2, 1]) d = (poly1[3, 0], poly1[3, 1]) e = (poly2[0, 0], poly2[0, 1]) f = (poly2[1, 0], poly2[1, 1]) g = (poly2[2, 0], poly2[2, 1]) h = (poly2[3, 0], poly2[3, 1]) polygon1 = Polygon([a, b, c, d]) polygon2 = Polygon([e, f, g, h]) overlap = polygon1.intersection(polygon2) overlaparea = overlap.area points = np.asarray(overlap.exterior) return points
def PR_compare(objid, sampleNworkers=40): os.chdir("..") # worker_lst,tiles,indicatorMat= createObjIndicatorMatrix(objid,PRINT=True,sampleNworkers=sampleNworkers,tqdm_on=False,tile_only=False) worker_lst = pkl.load( open("{0}/worker{1}.pkl".format(DATA_DIR, objid), 'r')) tiles = pkl.load(open("{0}/tiles{1}.pkl".format(DATA_DIR, objid), 'r')) objIndicatorMat = pkl.load( open("{0}/indMat{1}.pkl".format(DATA_DIR, objid), 'r')) os.chdir(DATA_DIR) worker_precision_lst, worker_recall_lst = compute_worker_lst_PR_obj( objid, worker_lst) best_worker = np.argmax(worker_recall_lst) print "Best worker's PR against BBG: ", max(worker_precision_lst), max( worker_recall_lst) approved_tiles = np.where(indicatorMat[best_worker] == 1)[0] for tidx in approved_tiles: plot_coords(tiles[tidx], color="lime") bb_objects = bb_info[bb_info["object_id"] == objid] bb_objects = bb_objects[bb_objects.worker_id != 3] best_worker_id = worker_lst[best_worker] print best_worker_id worker_bb_info = bb_objects[bb_objects["worker_id"] == best_worker_id] worker_BB_polygon = Polygon( zip(*process_raw_locs([ worker_bb_info["x_locs"].values[0], worker_bb_info["y_locs"].values[0] ]))) #.buffer(0) plot_coords(worker_BB_polygon, linestyle='--', color='#0000ff') joined_bb = join_tiles(approved_tiles, tiles) intersect_area = worker_BB_polygon.intersection(joined_bb).area precision = intersect_area / joined_bb.area recall = intersect_area / worker_BB_polygon.area print precision, recall return precision, recall