def test_intersect_repetition(self):
     a = [
         4114022797720682508, 4505997421712506892, 4505997834029367308,
         4505997868389105676, 4505998418144919564
     ]
     b = [4528191461944221900, 4505997456072245260]
     for i in range(1, 10000):
         pystare.intersect(a, b)
     self.assertTrue(True)
 def test_intersect_multires3(self):
     indices1 = pystare.from_latlon(lat, lon, 12)
     indices2 = numpy.array([0x100000000000000c], dtype=numpy.int64)
     intersected = pystare.intersect(indices1,
                                     indices2,
                                     multiresolution=True)
     numpy.testing.assert_array_equal(intersected,
                                      numpy.array([], dtype=numpy.int64))
 def test_intersect_multires2(self):
     indices1 = pystare.from_latlon(lat, lon, 12)
     indices2 = numpy.array([indices1[1]], dtype=numpy.int64)
     intersected = pystare.intersect(indices1,
                                     indices2,
                                     multiresolution=True)
     expected = numpy.array([4161865159985332236])
     numpy.testing.assert_array_equal(intersected, expected)
Exemple #4
0
 def stare_intersection(self, other):
     """Returns a ``STARESeries`` of the spatial intersection of self with `other`.
     Parameters
     ----------
     other: Collection of STARE indices.
         The STARE index collection representing the object to find the
         intersection with.
     """        
     data = []
     for srange in self._stare_column_name:
         data.append(pystare.intersect(srange, other))
     return pandas.Series(data, index=self.index)
 def test_multires_intersect2(self):
     sids = numpy.array([
         0x300a30000000000a, 0x300a30800000000a, 0x300a31000000000a,
         0x300a31800000000a
     ])
     parent = pystare.expand_intervals(sids, resolution=9)
     indices = pystare.intersect(parent, sids)
     ivs = indices
     with self.subTest():
         self.assertEqual(ivs.size, 1)
     with self.subTest():
         self.assertEqual(hex(ivs[0]), '0x300a300000000009')
    def test_intersect_single_res(self):
        resolution = 6
        resolution0 = resolution
        lat0 = numpy.array([10, 5, 60, 70], dtype=numpy.double)
        lon0 = numpy.array([-30, -20, 60, 10], dtype=numpy.double)
        hull0 = pystare.to_hull_range_from_latlon(lat0, lon0, resolution0)

        resolution1 = 6
        lat1 = numpy.array([10, 20, 30, 20], dtype=numpy.double)
        lon1 = numpy.array([-60, 60, 60, -60], dtype=numpy.double)
        hull1 = pystare.to_hull_range_from_latlon(lat1, lon1, resolution1)

        intersectedFalse = pystare.intersect(hull0,
                                             hull1,
                                             multiresolution=False)
        intersectedTrue = pystare.intersect(hull0, hull1, multiresolution=True)

        # See examples/test_intersect_single_res.py
        self.assertEqual(328, len(intersectedFalse))
        # self.assertEqual(172, len(intersectedTrue))
        # self.assertEqual(82, len(intersectedTrue))
        self.assertEqual(79, len(intersectedTrue))
 def test_multires_intersect1(self):
     # Earth are the 8 initial trixels
     earth = numpy.array([
         0x0000000000000000, 0x0800000000000000, 0x1000000000000000,
         0x1800000000000000, 0x2000000000000000, 0x2800000000000000,
         0x3000000000000000, 0x3800000000000000
     ])
     sids = numpy.array([
         0x300a30000000000a, 0x300a30800000000a, 0x300a31000000000a,
         0x300a31800000000a
     ])
     indices = pystare.intersect(earth, sids, multiresolution=True)
     ivs = indices
     with self.subTest():
         self.assertEqual(ivs.size, 1)
     with self.subTest():
         self.assertEqual(hex(ivs[0]), '0x300a300000000009')
 def test_intersect_multires(self):
     indices = pystare.from_latlon(lat, lon, 12)
     intersected = pystare.intersect(indices, indices, multiresolution=True)
     expected = numpy.array(
         [3643626709468577804, 4151504977312874508, 4161865159985332236])
     numpy.testing.assert_array_equal(intersected, expected)
def test_intersect_single_res(proj, transf):
    resolution = 6
    resolution0 = resolution
    lat0 = numpy.array([10, 5, 60, 70], dtype=numpy.double)
    lon0 = numpy.array([-30, -20, 60, 10], dtype=numpy.double)
    hull0 = pystare.to_hull_range_from_latlon(lat0, lon0, resolution0)

    lons0, lats0, intmat0 = pystare.triangulate_indices(hull0)
    triang0 = tri.Triangulation(lons0, lats0, intmat0)

    resolution1 = 6
    lat1 = numpy.array([10, 20, 30, 20], dtype=numpy.double)
    lon1 = numpy.array([-60, 60, 60, -60], dtype=numpy.double)
    hull1 = pystare.to_hull_range_from_latlon(lat1, lon1, resolution1)

    lons1, lats1, intmat1 = pystare.triangulate_indices(hull1)
    triang1 = tri.Triangulation(lons1, lats1, intmat1)

    #+ fig, axs = plt.subplots(3,subplot_kw={'projection':proj,'transform':transf})
    fig, axs = plt.subplots(4,
                            subplot_kw={
                                'projection': proj,
                                'transform': transf
                            })
    # plt.figure()
    # plt.subplot(projection=proj,transform=transf)
    ax = axs[0]
    # ax.set_global()
    ax.coastlines()

    plot1(None,
          None,
          lons0,
          lats0,
          triang0,
          c0='r',
          c1='b',
          transf=transf,
          ax=ax)
    plot1(None,
          None,
          lons1,
          lats1,
          triang1,
          c0='c',
          c1='r',
          transf=transf,
          ax=ax)
    # plt.show()

    intersectedFalse = pystare.intersect(hull0, hull1, multiresolution=False)
    # print('intersectedFalse: ',intersectedFalse)

    intersectedTrue = pystare.intersect(hull0, hull1, multiresolution=True)

    # plt.figure()
    # plt.subplot(projection=proj,transform=transf)
    ax = axs[1]
    # ax.set_global()
    ax.coastlines()

    lonsF, latsF, intmatF = pystare.triangulate_indices(intersectedFalse)
    triangF = tri.Triangulation(lonsF, latsF, intmatF)
    plot1(None,
          None,
          lonsF,
          latsF,
          triangF,
          c0='r',
          c1='b',
          transf=transf,
          ax=ax)
    # plt.show()

    # plt.figure()
    # plt.subplot(projection=proj,transform=transf)
    ax = axs[2]
    # ax.set_global()
    ax.coastlines()

    lonsT, latsT, intmatT = pystare.triangulate_indices(intersectedTrue)
    triangT = tri.Triangulation(lonsT, latsT, intmatT)
    plot1(None,
          None,
          lonsT,
          latsT,
          triangT,
          c0='r',
          c1='b',
          transf=transf,
          ax=ax)
    # plt.show()

    ## ok ## print('   len(False),len(True),delta: ',len(intersectedFalse),len(intersectedTrue),len(intersectedTrue)-len(intersectedFalse))
    ## ok ## print('un len(False),len(True),delta: ',len(numpy.unique(intersectedFalse)),len(numpy.unique(intersectedTrue)),len(numpy.unique(intersectedTrue))-len(numpy.unique(intersectedFalse)))
    ## ok ## print('compressed==True, first total, then w/o double counting: ',(7*16)+(17*4),(7*16)+(17*4)-(7+17))
    # print('count 0:    ',sum([1,34,34,4*6,24,22,9]))

    if True:
        r0 = pystare.srange()
        r0.add_intervals(hull0)

        r1 = pystare.srange()
        r1.add_intervals(hull1)

        r01 = pystare.srange()
        r01.add_intersect(r0, r1, False)
        n01 = r01.get_size_as_values()

        # self.assertEqual(328, n01)
        intersected = numpy.zeros([n01], dtype=numpy.int64)
        r01.copy_values(intersected)
        # See examples/test_intersect_single_res.py
        # self.assertEqual(328, len(intersected))

        r01.purge()
        n01 = r01.get_size_as_values()
        # self.assertEqual(0, n01)

        r01.reset()
        r01.add_intersect(r0, r1, True)
        # n01 = r01.get_size_as_values()
        # n01 = r01.get_size_as_values_multi_resolution(False)
        n01 = r01.get_size_as_values()
        #? self.assertEqual(172, n01)
        # self.assertEqual(82, n01)
        print('r01 n01: ', n01)

        intersected = numpy.zeros([n01], dtype=numpy.int64)
        r01.copy_values(intersected)

        ###??? Would intervals be different?

        lonsRT, latsRT, intmatRT = pystare.triangulate_indices(intersected)
        triangRT = tri.Triangulation(lonsRT, latsRT, intmatRT)

        # fig, axs = plt.subplots(3,subplot_kw={'projection':proj,'transform':transf})

        # plt.figure()
        # plt.subplot(projection=proj,transform=transf)
        ax = axs[3]
        # ax.set_global()
        ax.coastlines()
        # plot1(None,None,lonsRT,latsRT,triangRT,c0='r',c1='b',transf=transf,ax=ax)

        lonsRT_, latsRT_, intmatRT_ = pystare.triangulate_indices(
            intersected[51:55])
        triangRT_ = tri.Triangulation(lonsRT_, latsRT_, intmatRT_)

        # k = 51
        # for j in intersected[51:55]:
        #     print(k,' siv: 0x%016x'%intersected[k])
        #     k += 1

        plot1(None,
              None,
              lonsRT_,
              latsRT_,
              triangRT_,
              c0='g',
              c1='g',
              transf=transf,
              ax=ax)

        print('len(intersected): ', len(intersected))

    plt.show()
Exemple #10
0
resolution0 = resolution
lat0 = np.array([10, 5, 60, 70], dtype=np.double)
lon0 = np.array([-30, -20, 60, 10], dtype=np.double)
lats0, lons0, triang0, hull0 = make_hull(lat0, lon0, resolution0)
print('hull0: ', len(hull0))

resolution1 = resolution
lat1 = np.array([10, 20, 30, 20], dtype=np.double)
lon1 = np.array([-60, 60, 60, -60], dtype=np.double)
lats1, lons1, triang1, hull1 = make_hull(lat1, lon1, resolution1)
print('hull1: ', len(hull1))

if True:
    intersected = np.full([1000], -1, dtype=np.int64)
    # intersected = ps.intersect(hull0,hull1,multiresolution=False)
    intersected = ps.intersect(hull0, hull1, multiresolution=True)
    # intersected = ps.intersect(hull0,hull1,multiresolution=True)
    # print('hull0: ',[hex(i) for i in hull0])
    # print('hull1: ',[hex(i) for i in hull1])
    # ps._intersect_multiresolution(hull0,hull1,intersected)
    # print('intersected: ',len(intersected))
    # print('np.min:      ',np.amin(intersected))
    # print('intersected: ',[hex(i) for i in intersected])
    # The following are for _intersect_multiresolution's results
    # endarg = np.argmax(intersected < 0)
    # intersected = intersected[:endarg]
    # intersected = ps.intersect(hull0,hull1)
    print('intersected: ', len(intersected))
    lati, loni, latci, lonci = ps.to_vertices_latlon(intersected)
    lonsi, latsi, intmati = ps.triangulate(lati, loni)
    triangi = tri.Triangulation(lonsi, latsi, intmati)