In [4]:
from shapely.geometry import Polygon, Point

from rockfish2.navigation.p190 import P190

In [2]:
p190 = P190(database='/Users/ncm/Dev/Rockfish2/rockfish2/navigation/p190/tests/temp.sqlite')


[2014-10-17 13:11] INFO: rockfish: Connecting to existing database: /Users/ncm/Dev/Rockfish2/rockfish2/navigation/p190/tests/temp.sqlite

In [10]:
bins = p190.read_sql('SELECT * FROM cmp_line')
nbins = len(bins)

bins[0:5]


Out[10]:
bin easting northing distance x1 y1 x2 y2 x3 y3 x4 y4
0 1000 65654.350000 3598677.200000 0.00 65676.533210 3598722.118491 65681.953542 3598719.006819 65632.166790 3598632.281509 65626.746458 3598635.393181
1 1001 65651.238328 3598682.620332 6.25 65673.421538 3598727.538823 65678.841870 3598724.427151 65629.055118 3598637.701841 65623.634786 3598640.813513
2 1002 65648.126656 3598688.040664 12.50 65670.309866 3598732.959155 65675.730198 3598729.847483 65625.943446 3598643.122173 65620.523114 3598646.233845
3 1003 65645.014984 3598693.460996 18.75 65667.198194 3598738.379486 65672.618526 3598735.267814 65622.831774 3598648.542505 65617.411442 3598651.654177
4 1004 65641.903312 3598698.881327 25.00 65664.086522 3598743.799818 65669.506854 3598740.688146 65619.720102 3598653.962837 65614.299770 3598657.074509

In [6]:
poly = [Polygon(([bins.loc[i, 'x1'], bins.loc[i, 'y1']],
            [bins.loc[i, 'x2'], bins.loc[i, 'y2']],
            [bins.loc[i, 'x3'], bins.loc[i, 'y3']],
            [bins.loc[i, 'x4'], bins.loc[i, 'y4']]))\
                    for i in range(nbins)]

In [12]:
rec = p190.read_sql('SELECT * FROM receiver_groups WHERE point_number=91015')

rec[0:5]


Out[12]:
line_name point_number receiver_group easting northing cable_depth streamer_id offset midpoint_easting midpoint_northing cmp_model cmp_bin
0 MGL1407MCS15 91015 468 63568.9 3600379.1 9.1 1 158.825974 63528.30 3600447.35 None None
1 MGL1407MCS15 91015 467 63579.7 3600372.8 9.0 1 169.870068 63533.70 3600444.20 None None
2 MGL1407MCS15 91015 466 63590.6 3600366.6 9.0 1 181.078464 63539.15 3600441.10 None None
3 MGL1407MCS15 91015 465 63601.4 3600360.3 9.0 1 192.472803 63544.55 3600437.95 None None
4 MGL1407MCS15 91015 464 63612.1 3600353.9 9.0 1 204.015318 63549.90 3600434.75 None None

Search all polygons


In [26]:
pts = [Point(rec.ix[i]['midpoint_easting'], rec.ix[i]['midpoint_northing']) for i in range(len(rec))]

pt_in_bin = [np.nonzero([p.contains(pt) for p in poly])[0] for pt in pts]

In [27]:
pt_in_bin


Out[27]:
[array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([79]),
 array([78]),
 array([77]),
 array([76]),
 array([75]),
 array([74]),
 array([73]),
 array([72]),
 array([71]),
 array([69, 70]),
 array([69]),
 array([68]),
 array([66]),
 array([65]),
 array([64]),
 array([63]),
 array([62]),
 array([61]),
 array([60]),
 array([59]),
 array([58]),
 array([57]),
 array([56]),
 array([55]),
 array([53]),
 array([52]),
 array([51]),
 array([50]),
 array([49]),
 array([48]),
 array([47]),
 array([46]),
 array([45]),
 array([44]),
 array([43]),
 array([42]),
 array([40]),
 array([39]),
 array([38]),
 array([37]),
 array([36]),
 array([35]),
 array([34]),
 array([33]),
 array([32]),
 array([31]),
 array([30, 31]),
 array([29, 30]),
 array([27, 28]),
 array([26]),
 array([25]),
 array([24]),
 array([23]),
 array([22]),
 array([21]),
 array([20]),
 array([19]),
 array([18]),
 array([17, 18]),
 array([16, 17]),
 array([15]),
 array([13, 14]),
 array([12, 13]),
 array([11]),
 array([10]),
 array([9]),
 array([8]),
 array([7]),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([5]),
 array([3, 4]),
 array([2, 3]),
 array([1]),
 array([0]),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64)]

Search within range of last assignement


In [40]:
def find_polys(pts, poly, nsearch_max=200):
     
    npoly = len(poly)
    search_range = [0, npoly]
    inbins = -999 * np.ones(len(pts))
    for ipt, pt in enumerate(pts):
        ip = range(*search_range)
        _inbins = np.nonzero([poly[i].contains(pt) for i in ip])[0]
        if len(_inbins) > 0:
            inbins[ipt] = _inbins[0]
            ip0 = _inbins[0]
            search_range = [max(0, ip0 - nsearch_max), min(npoly, ip0 + nsearch_max)]
            
    return inbins

In [41]:
pt_in_bin = find_polys(pts, poly)

In [46]:
[(i, pt_in_bin[i]) for i in range(len(pt_in_bin)) if pt_in_bin[i] > 0]


Out[46]:
[(227, 79.0),
 (228, 78.0),
 (229, 77.0),
 (230, 76.0),
 (231, 75.0),
 (232, 74.0),
 (233, 73.0),
 (234, 72.0),
 (235, 71.0),
 (236, 69.0),
 (237, 69.0),
 (238, 68.0),
 (239, 66.0),
 (240, 65.0),
 (241, 64.0),
 (242, 63.0),
 (243, 62.0),
 (244, 61.0),
 (245, 60.0),
 (246, 59.0),
 (247, 58.0),
 (248, 57.0),
 (249, 56.0),
 (250, 55.0),
 (251, 53.0),
 (252, 52.0),
 (253, 51.0),
 (254, 50.0),
 (255, 49.0),
 (256, 48.0),
 (257, 47.0),
 (258, 46.0),
 (259, 45.0),
 (260, 44.0),
 (261, 43.0),
 (262, 42.0),
 (263, 40.0),
 (264, 39.0),
 (265, 38.0),
 (266, 37.0),
 (267, 36.0),
 (268, 35.0),
 (269, 34.0),
 (270, 33.0),
 (271, 32.0),
 (272, 31.0),
 (273, 30.0),
 (274, 29.0),
 (275, 27.0),
 (276, 26.0),
 (277, 25.0),
 (278, 24.0),
 (279, 23.0),
 (280, 22.0),
 (281, 21.0),
 (282, 20.0),
 (283, 19.0),
 (284, 18.0),
 (285, 17.0),
 (286, 16.0),
 (287, 15.0),
 (288, 13.0),
 (289, 12.0),
 (290, 11.0),
 (291, 10.0),
 (292, 9.0),
 (293, 8.0),
 (294, 7.0),
 (299, 5.0),
 (300, 3.0),
 (301, 2.0),
 (302, 1.0)]

In [ ]: