Example #1
0
 def test__split_lines(self):
     large = mm.buffered_limit(self.df_buildings, 100)
     dense = mm.elements._split_lines(large, 100)
     small = mm.buffered_limit(self.df_buildings, 30)
     dense2 = mm.elements._split_lines(small, 100)
     assert len(dense) == 53
     assert len(dense2) == 51
Example #2
0
    def setup_method(self):

        test_file_path = mm.datasets.get_path("bubenec")
        self.df_buildings = gpd.read_file(test_file_path, layer="buildings")
        self.df_tessellation = gpd.read_file(test_file_path, layer="tessellation")
        self.df_streets = gpd.read_file(test_file_path, layer="streets")
        self.df_streets["nID"] = range(len(self.df_streets))
        self.limit = mm.buffered_limit(self.df_buildings, 50)
Example #3
0
    def test_Tessellation(self):
        tes = mm.Tessellation(self.df_buildings, "uID", self.limit, segment=2)
        tessellation = tes.tessellation
        assert len(tessellation) == len(self.df_tessellation)
        bands = mm.Tessellation(self.df_streets,
                                "nID",
                                mm.buffered_limit(self.df_streets, 50),
                                segment=5).tessellation
        assert len(bands) == len(self.df_streets)

        #  test_enclosed_tessellation
        enc1 = mm.Tessellation(self.df_buildings,
                               "uID",
                               enclosures=self.enclosures).tessellation
        assert len(enc1) == 155
        assert isinstance(enc1, gpd.GeoDataFrame)

        enc1_loop = mm.Tessellation(self.df_buildings,
                                    "uID",
                                    enclosures=self.enclosures,
                                    use_dask=False).tessellation
        assert len(enc1) == 155
        assert isinstance(enc1, gpd.GeoDataFrame)

        assert len(enc1_loop) == 155
        assert isinstance(enc1_loop, gpd.GeoDataFrame)

        assert_geodataframe_equal(enc1, enc1_loop)

        with pytest.raises(ValueError):
            mm.Tessellation(self.df_buildings,
                            "uID",
                            limit=self.limit,
                            enclosures=self.enclosures)

        enc1_loop = mm.Tessellation(self.df_buildings,
                                    "uID",
                                    enclosures=self.enclosures,
                                    use_dask=False).tessellation
        assert len(enc1) == 155
        assert isinstance(enc1, gpd.GeoDataFrame)

        # erroneous geometry
        df = self.df_buildings
        b = df.total_bounds
        x = np.mean([b[0], b[2]])
        y = np.mean([b[1], b[3]])

        df.loc[144] = [145, Polygon([(x, y), (x, y + 1), (x + 1, y)])]
        df.loc[145] = [146, MultiPoint([(x, y), (x + 1, y)]).buffer(0.55)]
        df.loc[146] = [147, affinity.rotate(df.geometry.iloc[0], 12)]

        tess = mm.Tessellation(df, "uID", self.limit)
        assert tess.collapsed == {145}
        assert len(tess.multipolygons) == 3
Example #4
0
 def test_Tessellation(self):
     tes = mm.Tessellation(self.df_buildings, "uID", self.limit, segment=2)
     tessellation = tes.tessellation
     assert len(tessellation) == len(self.df_tessellation)
     bands = mm.Tessellation(
         self.df_streets, "nID", mm.buffered_limit(self.df_streets, 50), segment=5
     ).tessellation
     assert len(bands) == len(self.df_streets)
     queen_corners = tes.queen_corners(2)
     w = libpysal.weights.Queen.from_dataframe(queen_corners)
     assert w.neighbors[14] == [35, 36, 13, 15, 26, 27, 28, 30, 31]
Example #5
0
    def setup(self):

        test_file_path = mm.datasets.get_path("bubenec")
        self.df_buildings = gpd.read_file(test_file_path, layer="buildings")
        self.df_tessellation = gpd.read_file(test_file_path, layer="tessellation")
        self.df_streets = gpd.read_file(test_file_path, layer="streets")
        self.df_streets["nID"] = range(len(self.df_streets))
        self.limit = mm.buffered_limit(self.df_buildings, 50)
        nx = mm.gdf_to_nx(self.df_streets)
        self.nodes, self.edges = mm.nx_to_gdf(nx)
        self.df_buildings["nID"] = mm.get_network_id(
            self.df_buildings, self.df_streets, "nID"
        )
Example #6
0
 def test_snap_street_network_edge(self):
     snapped = mm.snap_street_network_edge(self.df_streets,
                                           self.df_buildings, 20,
                                           self.df_tessellation, 70)
     snapped_nonedge = mm.snap_street_network_edge(self.df_streets,
                                                   self.df_buildings, 20)
     snapped_edge = mm.snap_street_network_edge(
         self.df_streets,
         self.df_buildings,
         20,
         tolerance_edge=70,
         edge=mm.buffered_limit(self.df_buildings, buffer=50),
     )
     assert sum(snapped.geometry.length) == 5980.041004739525
     assert sum(snapped_edge.geometry.length) == 5980.718889937014
     assert sum(snapped_nonedge.geometry.length) < 5980.041004739525
Example #7
0
# In[ ]:

buildings = gpd.read_file('files/prg.gpkg', layer='buildings')

# In[ ]:

# buildings = mm.preprocess(buildings)
# buildings['uID'] = mm.unique_id(buildings)

# In[ ]:

buildings.to_file('files/prg.gpkg', layer='buildings', driver='GPKG')

# In[ ]:

limit = mm.buffered_limit(buildings, 100)

# In[ ]:

tessellation = mm.tessellation(buildings, 'uID', limit, queen_corners=False)
tessellation.to_file('files/prg.gpkg', layer='tessallation', driver='GPKG')

# In[ ]:

queen = libpysal.weights.Queen.from_dataframe(tessellation)

# In[ ]:

islands = queen.islands
tessellation.drop(islands, inplace=True)
buildings.drop(islands, inplace=True)