Exemple #1
0
def test_missing_values_empty_warning():
    s = GeoSeries([Point(1, 1), None, np.nan, BaseGeometry(), Polygon()])
    with pytest.warns(UserWarning):
        s.isna()

    with pytest.warns(UserWarning):
        s.notna()
 def fillna(self, value=None):
     """ Fill NA/NaN values with a geometry (empty polygon by default) """
     if value is None:
         value = BaseGeometry()
     return GeoSeries(self._geometry_array.fillna(value),
                      index=self.index,
                      crs=self.crs,
                      name=self.name)
Exemple #3
0
    def test_align_mixed(self):
        a1 = self.a1
        s2 = pd.Series([1, 2], index=['B', 'C'])
        res1, res2 = a1.align(s2)

        exp2 = pd.Series([BaseGeometry(), 1, 2],
                         dtype=object,
                         index=['A', 'B', 'C'])
        assert_series_equal(res2, exp2)
Exemple #4
0
 def align(self, other, join='outer', level=None, copy=True,
           fill_value=None, **kwargs):
     if fill_value is None:
         fill_value = BaseGeometry()
     left, right = super(GeoSeries, self).align(other, join=join,
                                                level=level, copy=copy,
                                                fill_value=fill_value,
                                                **kwargs)
     return left, right
    def unary_union(self):
        attr = "unary_union"
        meta = BaseGeometry()

        return self.reduction(
            lambda x: getattr(x, attr),
            token=f"{self._name}-{attr}",
            aggregate=lambda x: getattr(geopandas.GeoSeries(x), attr),
            meta=meta,
        )
Exemple #6
0
 def convex_hull(self):
     """Convex hull of union of all objects in the field."""
     field = BaseGeometry()
     if self.obstacles:
         field |= self.obstacles
     if self.targets:
         field |= union(*self.targets)
     if self.spawns:
         field |= union(*self.spawns)
     return field.convex_hull
Exemple #7
0
    def fillna(self, value=None, method=None, inplace=False,
               **kwargs):
        """Fill NA/NaN values with a geometry (empty polygon by default).

        "method" is currently not implemented for pandas <= 0.12.
        """
        if value is None:
            value = BaseGeometry()
        return super(GeoSeries, self).fillna(value=value, method=method,
                                             inplace=inplace, **kwargs)
 def align(self, other, join='outer', level=None, copy=True,
           fill_value=None, **kwargs):
     if fill_value is None:
         fill_value = BaseGeometry()
     left, right = super(GeoSeries, self).align(other, join=join,
                                                level=level, copy=copy,
                                                fill_value=fill_value,
                                                **kwargs)
     if isinstance(other, GeoSeries):
         return GeoSeries(left), GeoSeries(right)
     else: # It is probably a Series, let's keep it that way
         return GeoSeries(left), right
Exemple #9
0
def test_read_carto_basegeometry_as_null_geom_value(mocker):
    # Given
    cm_mock = mocker.patch.object(ContextManager, 'copy_to')
    cm_mock.return_value = GeoDataFrame({
        'cartodb_id': [1],
        'the_geom': [None]
    })

    # When
    gdf = read_carto('__source__', CREDENTIALS, null_geom_value=BaseGeometry())

    # Then
    expected = GeoDataFrame({
        'cartodb_id': [1],
        'the_geom': [BaseGeometry()]
    },
                            geometry='the_geom')

    cm_mock.assert_called_once_with('__source__', None, None, 3)
    assert expected.equals(gdf)
    assert gdf.crs == 'epsg:4326'
Exemple #10
0
    def fillna(self, value=None, method=None, inplace=False, **kwargs):
        """Fill NA values with a geometry (empty polygon by default).

        "method" is currently not implemented for pandas <= 0.12.

        Examples
        --------

        >>> from shapely.geometry import Polygon
        >>> s = geopandas.GeoSeries(
        ...     [
        ...         Polygon([(0, 0), (1, 1), (0, 1)]),
        ...         None,
        ...         Polygon([(0, 0), (-1, 1), (0, -1)]),
        ...     ]
        ... )
        >>> s
        0    POLYGON ((0.00000 0.00000, 1.00000 1.00000, 0....
        1                                                 None
        2    POLYGON ((0.00000 0.00000, -1.00000 1.00000, 0...
        dtype: geometry

        >>> s.fillna()
        0    POLYGON ((0.00000 0.00000, 1.00000 1.00000, 0....
        1                             GEOMETRYCOLLECTION EMPTY
        2    POLYGON ((0.00000 0.00000, -1.00000 1.00000, 0...
        dtype: geometry

        >>> s.fillna(Polygon([(0, 1), (2, 1), (1, 2)]))
        0    POLYGON ((0.00000 0.00000, 1.00000 1.00000, 0....
        1    POLYGON ((0.00000 1.00000, 2.00000 1.00000, 1....
        2    POLYGON ((0.00000 0.00000, -1.00000 1.00000, 0...
        dtype: geometry

        See Also
        --------
        GeoSeries.isna : detect missing values
        """
        if value is None:
            value = BaseGeometry()
        return super().fillna(value=value,
                              method=method,
                              inplace=inplace,
                              **kwargs)
Exemple #11
0
def test_missing_values():
    s = GeoSeries([Point(1, 1), None, np.nan, BaseGeometry(), Polygon()])

    # construction -> missing values get normalized to None
    assert s[1] is None
    assert s[2] is None
    assert s[3].is_empty
    assert s[4].is_empty

    # isna / is_empty
    assert s.isna().tolist() == [False, True, True, False, False]
    assert s.is_empty.tolist() == [False, False, False, True, True]
    assert s.notna().tolist() == [True, False, False, True, True]

    # fillna defaults to fill with empty geometry -> no missing values anymore
    assert not s.fillna().isna().any()

    # dropna drops the missing values
    assert not s.dropna().isna().any()
    assert len(s.dropna()) == 3
Exemple #12
0
 def test_empty_base(self):
     with pytest.warns(FutureWarning):
         g = BaseGeometry()
     assert g.is_empty
Exemple #13
0
def test_numpy_object_array():
    np = pytest.importorskip("numpy")

    geoms = [BaseGeometry(), EmptyGeometry()]
    arr = np.empty(2, object)
    arr[:] = geoms
Exemple #14
0
 def test_empty_base(self):
     g = BaseGeometry()
     self.failUnless(g._is_empty, True)
Exemple #15
0
 def test_empty_base(self):
     g = BaseGeometry()
     assert g.is_empty
Exemple #16
0
 def test_none_geom(self):
     p = BaseGeometry()
     p._geom = None
     self.failUnless(p.is_empty, True)
Exemple #17
0
 def test_none_geom(self):
     p = BaseGeometry()
     p._geom = None
     self.assertTrue(p.is_empty)
Exemple #18
0
 def test_empty_base(self):
     g = BaseGeometry()
     self.assertTrue(g._is_empty)
Exemple #19
0
def test_numpy_object_array():
    geoms = [BaseGeometry(), EmptyGeometry()]
    arr = np.empty(2, object)
    arr[:] = geoms
    def __init__(self, *args, **kwargs):
        super(FourExitsField, self).__init__(*args, **kwargs)

        A = (0, 0)
        B = (87, 0)
        C = (0, 10)
        D = (20, 40)
        E = (20, 0)
        F = (20, 20)
        G = (40, 20)
        H = (60, 0)
        I = (60, 20)

        J = (0, 10 + self.exit_width)
        K = (0, 80)
        L = (6, 80)
        M = (0, 60)
        N = (40, 60)

        O = (6 + self.exit_width, 80)
        P = (100, 80)
        Q = (100, 50 + self.exit_width)
        R = (60, 60)
        S = (100, 60)
        T = (70, 60)
        U = (70, 40)

        V = (87 + self.exit_width, 0)
        W = (100, 0)
        Z = (100, 50)

        obstacles = BaseGeometry()

        obstacles |= LineString([C, A, B])
        obstacles |= LineString([E, D])
        obstacles |= LineString([F, G])
        obstacles |= LineString([H, I])
        obstacles |= LineString([J, K, L])
        obstacles |= LineString([M, N])
        obstacles |= LineString([O, P, Q])
        obstacles |= LineString([S, R])
        obstacles |= LineString([T, U])
        obstacles |= LineString([Z, W, V])

        targets = [LineString([C, J]),
                   LineString([L, O]),
                   LineString([Q, Z]),
                   LineString([B, V])]

        # h1 = LineString([(J[0] - 2, J[1]), J]) | LineString([(C[0] - 2, C[1]), C])
        # obstacles |= h1
        #
        # targets = [
        #     h1.convex_hull,
        # ]

        self.obstacles = obstacles
        self.targets = targets

        spawn = obstacles.convex_hull
        self.spawns = [spawn]
        self.domain = self.convex_hull()