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
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)
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
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]
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" )
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
# 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)