spatial-join 0.1.5

Spatial join tools
Documentation
from math import pi, cos, sin
from random import uniform

from shapely.geometry import LineString, GeometryCollection
import geopandas as gpd

longitudes = (-80, -40)
latitudes = (15, 45)


def rand_pt():
    lon = uniform(*longitudes)
    lat = uniform(*latitudes)
    return (lon, lat)

def rand_poly(max_distance_degrees = 0.5):
    start = rand_pt()
    distance = uniform(0, max_distance_degrees)
    angle_rad = uniform(0, 2*pi)
    end = (start[0] + cos(angle_rad) * distance,
           start[1] + sin(angle_rad) * distance)
    return LineString((start, end)).buffer(0.025)


def make(n, output):
    shapes = GeometryCollection([rand_poly() for _ in range(n)])

    if output.suffix == '.wkt':
        output.write_text(shapes.wkt)
    elif output.suffix == '.wkb':
        output.write_bytes(shapes.wkb)
    else:
        raise ValueError


from shapely.wkt import loads

def compare_sjoin():
    w = gpd.GeoDataFrame(geometry=list(loads(Path('polys1k.wkt').read_text())))
    gpd.sjoin(w, w, how='inner', op='intersects')