コード例 #1
0
def test_ST_Buffer():
    data = ["POLYGON((0 0,1 0,1 1,0 0))"]
    data = GeoSeries(data)
    rst = data.buffer(1.2).to_wkt()
    expect = "POLYGON ((-0.848528137423857 0.848528137423857,0.151471862576143 1.84852813742386,0.19704327236937 1.89177379057287,0.244815530740195 1.93257515374836,0.294657697249032 1.97082039324994,0.346433157981967 2.00640468153451,0.4 2.03923048454133,0.455211400312543 2.06920782902604,0.511916028309039 2.09625454917112,0.569958460545639 2.12029651179664,0.629179606750062 2.14126781955418,0.689417145876974 2.15911099154688,0.750505971018688 2.17377712088057,0.812278641951722 2.18522600871417,0.874565844078815 2.19342627444193,0.937196852508467 2.19835544170549,1.0 2.2,1.06280314749153 2.19835544170549,1.12543415592118 2.19342627444193,1.18772135804828 2.18522600871417,1.24949402898131 2.17377712088057,1.31058285412302 2.15911099154688,1.37082039324994 2.14126781955418,1.43004153945436 2.12029651179664,1.48808397169096 2.09625454917112,1.54478859968746 2.06920782902604,1.6 2.03923048454133,1.65356684201803 2.00640468153451,1.70534230275097 1.97082039324994,1.75518446925981 1.93257515374836,1.80295672763063 1.89177379057287,1.84852813742386 1.84852813742386,1.89177379057287 1.80295672763063,1.93257515374837 1.7551844692598,1.97082039324994 1.70534230275097,2.00640468153451 1.65356684201803,2.03923048454133 1.6,2.06920782902604 1.54478859968746,2.09625454917112 1.48808397169096,2.12029651179664 1.43004153945436,2.14126781955418 1.37082039324994,2.15911099154688 1.31058285412302,2.17377712088057 1.24949402898131,2.18522600871417 1.18772135804828,2.19342627444193 1.12543415592118,2.19835544170549 1.06280314749153,2.2 1.0,2.2 0.0,2.19835544170549 -0.062803147491532,2.19342627444193 -0.125434155921184,2.18522600871417 -0.187721358048277,2.17377712088057 -0.249494028981311,2.15911099154688 -0.310582854123025,2.14126781955418 -0.370820393249937,2.12029651179664 -0.43004153945436,2.09625454917112 -0.48808397169096,2.06920782902604 -0.544788599687456,2.03923048454133 -0.6,2.00640468153451 -0.653566842018033,1.97082039324994 -0.705342302750968,1.93257515374836 -0.755184469259805,1.89177379057287 -0.80295672763063,1.84852813742386 -0.848528137423857,1.80295672763063 -0.891773790572873,1.75518446925981 -0.932575153748365,1.70534230275097 -0.970820393249937,1.65356684201803 -1.00640468153451,1.6 -1.03923048454133,1.54478859968746 -1.06920782902604,1.48808397169096 -1.09625454917112,1.43004153945436 -1.12029651179664,1.37082039324994 -1.14126781955418,1.31058285412302 -1.15911099154688,1.24949402898131 -1.17377712088057,1.18772135804828 -1.18522600871417,1.12543415592118 -1.19342627444193,1.06280314749153 -1.19835544170549,1.0 -1.2,0.0 -1.2,-0.062803147491532 -1.19835544170549,-0.125434155921184 -1.19342627444193,-0.187721358048276 -1.18522600871417,-0.24949402898131 -1.17377712088057,-0.310582854123024 -1.15911099154688,-0.370820393249936 -1.14126781955418,-0.430041539454359 -1.12029651179664,-0.488083971690959 -1.09625454917112,-0.544788599687455 -1.06920782902604,-0.6 -1.03923048454133,-0.653566842018031 -1.00640468153451,-0.705342302750966 -0.970820393249938,-0.755184469259804 -0.932575153748366,-0.802956727630628 -0.891773790572875,-0.848528137423855 -0.848528137423859,-0.891773790572871 -0.802956727630632,-0.932575153748363 -0.755184469259807,-0.970820393249935 -0.70534230275097,-1.00640468153451 -0.653566842018035,-1.03923048454132 -0.6,-1.06920782902604 -0.544788599687459,-1.09625454917112 -0.488083971690964,-1.12029651179664 -0.430041539454364,-1.14126781955418 -0.370820393249941,-1.15911099154688 -0.310582854123029,-1.17377712088057 -0.249494028981315,-1.18522600871416 -0.187721358048281,-1.19342627444193 -0.125434155921189,-1.19835544170549 -0.062803147491537,-1.2 -0.0,-1.19835544170549 0.062803147491527,-1.19342627444193 0.125434155921179,-1.18522600871417 0.187721358048272,-1.17377712088057 0.249494028981306,-1.15911099154688 0.310582854123019,-1.14126781955419 0.370820393249931,-1.12029651179664 0.430041539454355,-1.09625454917112 0.488083971690954,-1.06920782902604 0.54478859968745,-1.03923048454133 0.6,-1.00640468153451 0.653566842018027,-0.970820393249941 0.705342302750962,-0.93257515374837 0.755184469259799,-0.891773790572878 0.802956727630624,-0.848528137423857 0.848528137423857))"

    assert rst[0] == expect
コード例 #2
0
def test_ST_Contains():
    p11 = "POLYGON((0 0,1 0,1 1,0 1,0 0))"
    p12 = "POLYGON((8 0,9 0,9 1,8 1,8 0))"
    p13 = "POINT(2 2)"
    p14 = "POINT(200 2)"
    data1 = GeoSeries([p11, p12, p13, p14])

    p21 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p22 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p23 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p24 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    data2 = GeoSeries([p21, p22, p23, p24])
    rst = data2.contains(data1)
    assert len(rst) == 4
    assert rst[0] == 1
    assert rst[1] == 0
    assert rst[2] == 1
    assert rst[3] == 0

    rst = data2.contains(data2[0])
    assert len(rst) == 4
    assert rst[0] == 1
    assert rst[1] == 1
    assert rst[2] == 1
    assert rst[3] == 1
コード例 #3
0
ファイル: geoseries_test.py プロジェクト: yijialee/arctern
    def test_from_empty(self):
        s = GeoSeries([], dtype="GeoDtype")
        assert_is_geoseries(s)
        assert len(s) == 0

        s = GeoSeries()
        assert_is_geoseries(s)
        assert len(s) == 0
コード例 #4
0
def test_ST_Transform():
    data = ["POINT (10 10)"]
    data = GeoSeries(data, crs="EPSG:4326")
    rst = data.to_crs("EPSG:3857").to_wkt()

    wkt = rst[0]
    rst_point = ogr.CreateGeometryFromWkt(str(wkt))
    assert abs(rst_point.GetX() - 1113194.90793274 < 0.01)
    assert abs(rst_point.GetY() - 1118889.97485796 < 0.01)
コード例 #5
0
ファイル: geoseries_test.py プロジェクト: yijialee/arctern
def test_to_geopandas():
    p1 = "POLYGON ((0 0,4 0,4 4,0 4,0 0))"
    p2 = None
    data = GeoSeries([p1, p2], crs="EPSG:4326")
    rst = data.to_geopandas()

    import shapely
    assert rst[0] == shapely.geometry.Polygon(((0, 0), (4, 0), (4, 4), (0, 4), (0, 0)))
    assert rst[1] is None
    assert rst.crs.to_string() == "EPSG:4326"
コード例 #6
0
ファイル: geoseries_test.py プロジェクト: yijialee/arctern
    def test_equals(self):
        s1 = GeoSeries([make_point(1, 1), None])
        s2 = GeoSeries([make_point(1, 1), None])
        assert s1.equals(s2)

        s1 = GeoSeries()
        s2 = GeoSeries()
        assert s1.equals(s2)
コード例 #7
0
def test_ST_HausdorffDistance():
    import math
    data1 = ["POLYGON((0 0 ,0 1, 1 1, 1 0, 0 0))", "POINT(0 0)"]
    data2 = ["POLYGON((0 0 ,0 2, 1 1, 1 0, 0 0))", "POINT(0 1)"]
    data1 = GeoSeries(data1)
    data2 = GeoSeries(data2)
    rst = data1.hausdorff_distance(data2)
    assert len(rst) == 2
    assert rst[0] == 1
    assert rst[1] == 1

    rst = data1.hausdorff_distance(data1[1])
    assert len(rst) == 2
    assert math.isclose(rst[0], math.sqrt(2), rel_tol=1e-5)
    assert rst[1] == 0
コード例 #8
0
def test_ST_Centroid():
    data = ["POLYGON((0 0,1 0,1 1,0 1,0 0))", "POLYGON((0 0,0 8,8 8,8 0,0 0))"]
    data = GeoSeries(data)
    rst = data.centroid.to_wkt()

    assert rst[0] == "POINT (0.5 0.5)"
    assert rst[1] == "POINT (4 4)"
コード例 #9
0
def test_ST_Length():
    data = ["LINESTRING(0 0,0 1)", "LINESTRING(1 1,1 4)"]
    data = GeoSeries(data)
    rst = data.length

    assert rst[0] == 1.0
    assert rst[1] == 3.0
コード例 #10
0
 def test_form_scalar_with_index(self):
     index = [1, 2, 3, 4, 5]
     s = GeoSeries('Point (1 2)', index=index)
     assert_is_geoseries(s)
     assert len(s) == 5
     for i in index:
         assert s[i] == s[index[0]]
コード例 #11
0
def test_ST_Area():
    data = ["POLYGON((0 0,1 0,1 1,0 1,0 0))", "POLYGON((0 0,0 8,8 8,8 0,0 0))"]
    data = GeoSeries(data)
    rst = data.area

    assert rst[0] == 1.0
    assert rst[1] == 64.0
コード例 #12
0
 def test_from_with_na_data(self):
     s = GeoSeries(['Point (1 2)', None, np.nan])
     assert_is_geoseries(s)
     assert len(s) == 3
     assert s.hasnans
     assert s[1] is None
     assert s[2] is None
コード例 #13
0
 def test_form_series_with_index(self):
     index = [1, 2, 3, 4, 5]
     s = pd.Series(make_point(1, 1), index=index)
     geo_s = GeoSeries(s)
     assert_is_geoseries(geo_s)
     assert len(geo_s) == 5
     for i in index:
         assert geo_s[i] == geo_s[index[0]]
コード例 #14
0
    def test_missing_values(self):
        s = GeoSeries([make_point(1, 2), None])
        assert s[1] is None
        assert s.isna().tolist() == [False, True]
        assert s.notna().tolist() == [True, False]
        assert not s.dropna().isna().any()

        s1 = s.fillna(make_point(1, 1))
        s1 = s1.to_wkt()
        assert s1[0] == "POINT (1 2)"
        assert s1[1] == "POINT (1 1)"

        # fillna with method
        s1 = s.fillna(method='ffill')
        assert s1[0] == s1[1]

        s1 = s[::-1].fillna(method="bfill")
        assert s1[0] == s1[1]

        # set item with na value
        s[0] = np.nan
        assert s[0] is None

        s[0] = pd.NA
        assert s[0] is None
コード例 #15
0
ファイル: geoseries_test.py プロジェクト: yijialee/arctern
 def test_from_geopandas(self):
     import geopandas as gpd
     from shapely.geometry import Point
     gpd_s = gpd.GeoSeries([Point(1, 1), Point(1, 2), None], index=[1, 2, 3], crs='EPSG:4326')
     s = GeoSeries.from_geopandas(gpd_s)
     assert_is_geoseries(s)
     assert s.crs == "EPSG:4326"
     assert s.to_wkt().to_list() == [make_point(1, 1), make_point(1, 2), None]
     assert s.index.to_list() == [1, 2, 3]
コード例 #16
0
    def test_operator(self):
        # __eq__
        s = GeoSeries([make_point(0, 0), make_point(1, 2), None])
        r = s == s[0]
        assert r.tolist() == [True, False, False]

        # __ne__
        r = s != s[0]
        assert r.tolist() == [False, True, True]
コード例 #17
0
def test_geoseries_type_by_df_box_col_values():
    from pandas import DataFrame, Series
    series = GeoSeries(["POINT (0 0)", None, "POINT (0 1)", "POINT (2 0)"])
    df = DataFrame({'s': series})
    assert isinstance(df['s'], type(series))

    series = Series([1, None, 2, 3])
    df = DataFrame({'s': series})
    assert isinstance(df['s'], type(series))
コード例 #18
0
class TestCRS:
    def setup_method(self):
        self.crs = "epsg:3854"
        self.s = GeoSeries([make_point(x, x) for x in range(5)], crs=self.crs)

    def test_constrctor(self):
        assert self.crs.upper() == self.s.crs

    def test_series_method(self):
        assert self.s.head().crs == self.crs.upper()
        assert self.s[:4].crs == self.crs.upper()
        assert self.s.take([1, 3, 4]).crs == self.crs.upper()
        assert self.s[[True, False, True, True, True]].crs == self.crs.upper()

    # test methods in GeoSeries will produce GeoSeries as result
    def test_geom_method(self):
        assert self.s.buffer(0.2).crs == self.crs.upper()
        assert self.s.intersection(self.s).crs == self.crs.upper()
        assert self.s.centroid.crs == self.crs.upper()
コード例 #19
0
def test_ST_GeomFromGeoJSON():
    from pandas import Series
    j0 = "{\"type\":\"Point\",\"coordinates\":[1,2]}"
    j1 = "{\"type\":\"LineString\",\"coordinates\":[[1,2],[4,5],[7,8]]}"
    j2 = "{\"type\":\"Polygon\",\"coordinates\":[[[0,0],[0,1],[1,1],[1,0],[0,0]]]}"
    data = Series([j0, j1, j2])
    str_ptr = GeoSeries.geom_from_geojson(data).to_wkt()
    assert str_ptr[0] == "POINT (1 2)"
    assert str_ptr[1] == "LINESTRING (1 2,4 5,7 8)"
    assert str_ptr[2] == "POLYGON ((0 0,0 1,1 1,1 0,0 0))"
コード例 #20
0
def test_ST_PolygonFromEnvelope():
    from pandas import Series
    x_min = Series([0.0])
    x_max = Series([1.0])
    y_min = Series([0.0])
    y_max = Series([1.0])

    rst = GeoSeries.polygon_from_envelope(x_min, y_min, x_max, y_max).to_wkt()

    assert rst[0] == "POLYGON ((0 0,0 1,1 1,1 0,0 0))"
コード例 #21
0
def test_ST_AsGeoJSON():
    from pandas import Series
    j0 = "{\"type\":\"Point\",\"coordinates\":[1,2]}"
    j1 = "{\"type\":\"LineString\",\"coordinates\":[[1,2],[4,5],[7,8]]}"
    j2 = "{\"type\":\"Polygon\",\"coordinates\":[[[0,0],[0,1],[1,1],[1,0],[0,0]]]}"
    data = Series([j0, j1, j2])
    str_ptr = GeoSeries.geom_from_geojson(data).as_geojson()
    assert str_ptr[0] == '{ "type": "Point", "coordinates": [ 1.0, 2.0 ] }'
    assert str_ptr[
        1] == '{ "type": "LineString", "coordinates": [ [ 1.0, 2.0 ], [ 4.0, 5.0 ], [ 7.0, 8.0 ] ] }'
    assert str_ptr[
        2] == '{ "type": "Polygon", "coordinates": [ [ [ 0.0, 0.0 ], [ 0.0, 1.0 ], [ 1.0, 1.0 ], [ 1.0, 0.0 ], [ 0.0, 0.0 ] ] ] }'
コード例 #22
0
def test_geo_method_with_missing_value():
    s1 = GeoSeries([make_point(1, 1), None])
    s2 = GeoSeries([None, make_point(1, 1)])
    s3 = GeoSeries([make_point(1, 1), None])

    assert s1.geom_equals(s3).all()
    assert not s1.geom_equals(s2).any()
コード例 #23
0
def test_ST_Within():
    p11 = "POLYGON((0 0,1 0,1 1,0 1,0 0))"
    p12 = "POLYGON((8 0,9 0,9 1,8 1,8 0))"
    p13 = "LINESTRING(2 2,3 2)"
    p14 = "POINT(10 2)"
    data1 = GeoSeries([p11, p12, p13, p14])

    p21 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p22 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p23 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    p24 = "POLYGON((0 0,0 8,8 8,8 0,0 0))"
    data2 = GeoSeries([p21, p22, p23, p24])

    rst = data2.within(data1)
    assert len(rst) == 4
    assert rst[0] == 0
    assert rst[1] == 0
    assert rst[2] == 0
    assert rst[3] == 0

    rst = data1.within(data2[0])
    assert len(rst) == 4
    assert rst[0] == 1
    assert rst[1] == 0
    assert rst[2] == 1
    assert rst[3] == 0
コード例 #24
0
def test_ST_Point():
    from pandas import Series
    data1 = [1.3, 2.5]
    data2 = [3.8, 4.9]
    string_ptr = GeoSeries.point(data1, data2).to_wkt()
    assert len(string_ptr) == 2
    assert string_ptr[0] == "POINT (1.3 3.8)"
    assert string_ptr[1] == "POINT (2.5 4.9)"

    string_ptr = GeoSeries.point(Series([1, 2], dtype='double'), 5).to_wkt()
    assert len(string_ptr) == 2
    assert string_ptr[0] == "POINT (1 5)"
    assert string_ptr[1] == "POINT (2 5)"

    string_ptr = GeoSeries.point(5, Series([1, 2], dtype='double')).to_wkt()
    assert len(string_ptr) == 2
    assert string_ptr[0] == "POINT (5 1)"
    assert string_ptr[1] == "POINT (5 2)"

    string_ptr = GeoSeries.point(5.0, 1.0).to_wkt()
    assert len(string_ptr) == 1
    assert string_ptr[0] == "POINT (5 1)"
コード例 #25
0
class TestType:
    def setup_method(self):
        self.s = GeoSeries([make_point(x, x) for x in range(5)])

    def test_head_tail(self):
        assert_is_geoseries(self.s.head())
        assert_is_geoseries(self.s.tail())

    def test_slice(self):
        assert_is_geoseries(self.s[2::5])
        assert_is_geoseries(self.s[::-1])

    def test_loc_iloc(self):
        assert_is_geoseries(self.s.loc[1:])
        assert_is_geoseries(self.s.iloc[:4])

    def test_take(self):
        assert_is_geoseries(self.s.take([0, 2, 4]))

    def test_geom_method(self):
        assert_is_geoseries(self.s.buffer(0.2))
        assert_is_geoseries(self.s.intersection(self.s))
        assert_is_geoseries(self.s.centroid)
コード例 #26
0
    def test_geom_with_index(self):
        index = ['a', 'b']

        # unary
        s = GeoSeries([make_point(1, 1), None], index=index)
        s1 = s.length
        assert s1.index.to_list() == index

        # binary with same index
        left = GeoSeries([make_point(1, 1), None], index=index)
        right = GeoSeries([make_point(1, 1), None], index=index)
        s1 = left.geom_equals(right)
        assert s1.index.to_list() == index

        # binary with different index will align index
        left = GeoSeries([make_point(1, 1), None], index=[1, 2])
        right = GeoSeries([make_point(1, 1), None], index=[3, 4])
        s1 = left.geom_equals(right)
        assert s1.index.to_list() == [1, 2, 3, 4]
        assert s1.to_list() == [False, True, False, True]
コード例 #27
0
def test_ST_Touches():
    data1 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((1 1,1 2,2 2,2 1,1 1))"])
    data2 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((2 1,3 1,3 2,2 2,2 1))"])
    rst = data1.touches(data2)
    assert len(rst) == 2
    assert rst[0] == 0
    assert rst[1] == 1

    rst = data2.touches(GeoSeries("POLYGON ((1 1,1 2,2 2,2 1,1 1))")[0])
    assert len(rst) == 2
    assert rst[0] == 0
    assert rst[1] == 1
コード例 #28
0
def test_ST_Equals():
    data1 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((1 1,1 2,2 2,2 1,1 1))"])
    data2 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((2 1,3 1,3 2,2 2,2 1))"])
    rst = data1.geom_equals(data2)
    assert len(rst) == 2
    assert rst[0] == 1
    assert rst[1] == 0

    rst = data2.geom_equals(GeoSeries("POLYGON ((1 1,1 2,2 2,2 1,1 1))")[0])
    assert len(rst) == 2
    assert rst[0] == 1
    assert rst[1] == 0
コード例 #29
0
def test_ST_Intersection():
    data1 = GeoSeries(["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POINT (0 1)"])
    data2 = GeoSeries(["POLYGON ((2 1,3 1,3 2,2 2,2 1))", "POINT (0 1)"])
    rst = data1.intersection(data2).to_wkt()
    assert len(rst) == 2
    assert rst[0] == "LINESTRING (2 2,2 1)"
    assert rst[1] == "POINT (0 1)"

    rst = data1.intersection(GeoSeries("POINT (0 1)")[0]).to_wkt()
    assert len(rst) == 2
    assert rst[0] == "GEOMETRYCOLLECTION EMPTY"
    assert rst[1] == "POINT (0 1)"
コード例 #30
0
def test_ST_Crosses():
    data1 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((1 1,1 2,2 2,2 1,1 1))"])
    data2 = GeoSeries(
        ["POLYGON ((1 1,1 2,2 2,2 1,1 1))", "POLYGON ((2 1,3 1,3 2,2 2,2 1))"])
    rst = data1.crosses(data2)
    assert len(rst) == 2
    assert rst[0] == 0
    assert rst[1] == 0

    rst = data2.crosses(data2[0])
    assert len(rst) == 2
    assert rst[0] == 0
    assert rst[1] == 0