def test_get_buffer():
    results = make_map_subset.get_buffer(
        os.path.join(TEST_FP, 'data', 'test_make_map.geojson'), 42.3693239,
        -71.10103649999999, 20)
    assert len(results['features']) == 5
    lines = [
        x for x in results['features'] if x['geometry']['type'] == 'LineString'
    ]
    assert len(lines) == 4
    point = [
        x for x in results['features'] if x['geometry']['type'] == 'Point'
    ]
    assert len(point) == 1

    # Make sure that all the resulting features are at least partially
    # within the buffer
    center_point = get_reproject_point(42.3693239, -71.10103649999999,
                                       transformer_4326_to_3857)
    buff_poly = center_point.buffer(20)

    # To do this, have to convert the points and linestrings back to 3857
    reprojected_lines = reproject_records(lines)
    for r in reprojected_lines:
        assert r['geometry'].intersects(buff_poly)

    point_3857 = get_reproject_point(point[0]['geometry']['coordinates'][1],
                                     point[0]['geometry']['coordinates'][0],
                                     transformer_4326_to_3857)
    assert point_3857.within(buff_poly)

    results = make_map_subset.get_buffer(
        os.path.join(TEST_FP, 'data', 'test_make_map.geojson'), 42.3601,
        71.0589, 20)
    assert results == []

    # Test multilinestring
    results = make_map_subset.get_buffer(
        os.path.join(TEST_FP, 'data', 'make_map_multilinestring.geojson'),
        42.3693167036633, -71.1010048225989, 20)
    assert len(results['features']) == 1
Esempio n. 2
0
def get_waze_buffer(filename, outfile, lat, lon, radius):
    """
    Get waze elements that fall within a certain area
    Write them back out to a json file
    """
    items = json.load(open(filename))

    items = [get_linestring(x) for x in items]
    items = reproject_records(items)

    point = get_reproject_point(lat, lon)
    buffered_poly = point.buffer(radius)
    count = 0
    results = []
    for item in items:
        if item['geometry'].intersects(buffered_poly):
            count += 1
            results.append(item['properties'])
    print("{} results found".format(count))

    with open(outfile, 'w') as f:
        json.dump(results, f)