diff --git a/prettymaps/draw.py b/prettymaps/draw.py index 85330f6..edf97a9 100644 --- a/prettymaps/draw.py +++ b/prettymaps/draw.py @@ -277,7 +277,7 @@ def gdf_to_shapely( # Project gdf if applicable if not gdf.empty and gdf.crs is not None: - gdf = ox.project_gdf(gdf) + gdf = ox.projection.project_gdf(gdf) if layer in ["streets", "railway", "waterway"]: geometries = graph_to_shapely(gdf, width) @@ -426,7 +426,7 @@ def plot_legends( texts = [] for i in range(len(keypoints_df)): x, y = np.concatenate( - ox.project_gdf(keypoints_df.iloc[[i]]).geometry.iloc[0].centroid.xy + ox.projection.project_gdf(keypoints_df.iloc[[i]]).geometry.iloc[0].centroid.xy ) name = keypoints_df.name.iloc[i] kwargs = keypoints_df.kwargs.iloc[i] @@ -554,7 +554,7 @@ def draw_hillshade( min_x, max_x = ax.get_xlim() min_y, max_y = ax.get_ylim() - min_lon, min_lat, max_lon, max_lat = ox.project_gdf( + min_lon, min_lat, max_lon, max_lat = ox.projection.project_gdf( gdfs["perimeter"] ).total_bounds ax.imshow( @@ -601,7 +601,7 @@ def create_background( background = shapely.affinity.scale( box( - *shapely.ops.unary_union(ox.project_gdf(gdfs["perimeter"]).geometry).bounds + *shapely.ops.unary_union(ox.projection.project_gdf(gdfs["perimeter"]).geometry).bounds ), background_pad, background_pad, @@ -670,7 +670,7 @@ def transform_gdfs( """ # Project geometries gdfs = { - name: ox.project_gdf(gdf) if len(gdf) > 0 else gdf for name, gdf in gdfs.items() + name: ox.projection.project_gdf(gdf) if len(gdf) > 0 else gdf for name, gdf in gdfs.items() } # Create geometry collection from gdfs' geometries collection = GeometryCollection( @@ -685,7 +685,7 @@ def transform_gdfs( gdfs[layer].geometry = list(collection.geoms[i].geoms) # Reproject if len(gdfs[layer]) > 0: - gdfs[layer] = ox.project_gdf(gdfs[layer], to_crs="EPSG:4326") + gdfs[layer] = ox.projection.project_gdf(gdfs[layer], to_crs="EPSG:4326") return gdfs diff --git a/prettymaps/fetch.py b/prettymaps/fetch.py index cd864c2..89d2b06 100644 --- a/prettymaps/fetch.py +++ b/prettymaps/fetch.py @@ -95,7 +95,7 @@ def get_keypoints( Returns: geopandas.GeoDataFrame: A GeoDataFrame containing the keypoints that match the specified tags within the given perimeter. """ - keypoints_df = ox.features_from_polygon(perimeter, tags=tags) + keypoints_df = ox.features.features_from_polygon(perimeter, tags=tags) return keypoints_df @@ -150,7 +150,7 @@ def obtain_elevation(gdf): raster = rxr.open_rasterio(output_file).squeeze() - raster = raster.rio.reproject(CRS.from_string(ox.project_gdf(gdf).crs.to_string())) + raster = raster.rio.reproject(CRS.from_string(ox.projection.project_gdf(gdf).crs.to_string())) # convert to numpy array elevation_data = raster.data @@ -200,9 +200,9 @@ def parse_query(query): def get_boundary(query, radius, circle=False, rotation=0): # Get point from query - point = query if parse_query(query) == "coordinates" else ox.geocode(query) + point = query if parse_query(query) == "coordinates" else ox.geocoder.geocode(query) # Create GeoDataFrame from point - boundary = ox.project_gdf( + boundary = ox.projection.project_gdf( GeoDataFrame(geometry=[Point(point[::-1])], crs="EPSG:4326") ) @@ -252,19 +252,19 @@ def get_perimeter( perimeter = query else: # Fetch perimeter from OSM - perimeter = ox.geocode_to_gdf( + perimeter = ox.geocoder.geocode_to_gdf( query, by_osmid=by_osmid, **kwargs, ) # Scale according to aspect ratio - perimeter = ox.project_gdf(perimeter) + perimeter = ox.projection.project_gdf(perimeter) perimeter.loc[0, "geometry"] = scale(perimeter.loc[0, "geometry"], aspect_ratio, 1) perimeter = perimeter.to_crs(4326) # Apply dilation - perimeter = ox.project_gdf(perimeter) + perimeter = ox.projection.project_gdf(perimeter) if dilate is not None: perimeter.geometry = perimeter.geometry.buffer(dilate) perimeter = perimeter.to_crs(4326) @@ -404,7 +404,7 @@ def get_gdf( # Apply tolerance to the perimeter perimeter_with_tolerance = ( - ox.project_gdf(perimeter).buffer(perimeter_tolerance).to_crs(4326) + ox.projection.project_gdf(perimeter).buffer(perimeter_tolerance).to_crs(4326) ) perimeter_with_tolerance = unary_union(perimeter_with_tolerance.geometry).buffer(0) @@ -423,7 +423,7 @@ def get_gdf( elif layer == "sea": # Fetch geometries from OSM coastline = unary_union( - ox.features_from_polygon( + ox.features.features_from_polygon( bbox, tags={"natural": "coastline"} ).geometry.tolist() ) @@ -461,11 +461,11 @@ def get_gdf( else: if osmid is None: # Fetch geometries from OSM - gdf = ox.features_from_polygon( + gdf = ox.features.features_from_polygon( bbox, tags={tags: True} if type(tags) == str else tags ) else: - gdf = ox.geocode_to_gdf(osmid, by_osmid=True) + gdf = ox.geocoder.geocode_to_gdf(osmid, by_osmid=True) except Exception as e: # print(f"Error fetching {layer}: {e}") gdf = GeoDataFrame(geometry=[]) @@ -584,7 +584,7 @@ def unified_osm_request( dict: Dictionary of GeoDataFrames for each layer. """ # Apply tolerance to the perimeter - perimeter_with_tolerance = ox.project_gdf(perimeter).buffer(0).to_crs(4326) + perimeter_with_tolerance = ox.projection.project_gdf(perimeter).buffer(0).to_crs(4326) perimeter_with_tolerance = unary_union(perimeter_with_tolerance.geometry).buffer(0) # Fetch from perimeter's bounding box, to avoid missing some geometries @@ -605,7 +605,7 @@ def unified_osm_request( # Fetch all features in one request try: - all_features = ox.features_from_polygon(bbox, tags=combined_tags) + all_features = ox.features.features_from_polygon(bbox, tags=combined_tags) except Exception as e: all_features = GeoDataFrame(geometry=[]) @@ -624,7 +624,7 @@ def unified_osm_request( elif layer == "sea": try: coastline = unary_union( - ox.features_from_polygon( + ox.features.features_from_polygon( bbox, tags={"natural": "coastline"} ).geometry.tolist() ) @@ -682,7 +682,7 @@ def unified_osm_request( ] gdf = pd.concat([gdf, filtered_features], axis=0) else: - gdf = ox.geocode_to_gdf(kwargs.get("osmid"), by_osmid=True) + gdf = ox.geocoder.geocode_to_gdf(kwargs.get("osmid"), by_osmid=True) gdf = gdf.copy() gdf.geometry = gdf.geometry.intersection(perimeter_with_tolerance) diff --git a/requirements.txt b/requirements.txt index c5c0fb6..a1245cf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -numpy>=1.20,<1.25 +numpy>=1.26.4 matplotlib>=3.9.0 shapely>=2.0.0 -osmnx>=1.9.3,<2.0 +osmnx>=2.0.5 ipykernel>=6.29.5 rasterio>=1.4.3 rioxarray>=0.18.2 @@ -12,4 +12,4 @@ thefuzz>=0.22.1 elevation>=1.1.3 streamlit>=1.42.2 tqdm>=4.67.1 -scikit-learn>=1.6.1 \ No newline at end of file +scikit-learn>=1.6.1