code: def get_boundary(query, radius, circle=False, rotation=0):
      # Get point from query
      point = (
          query
          if parse_query(query) == "coordinates"
          else ox.geocode(query)
      )
      # Create GeoDataFrame from point
      boundary = ox.project_gdf(
          GeoDataFrame(geometry=[Point(point[::-1])], crs="EPSG:4326")
      )
  
      if circle:  # Circular shape
          # use .buffer() to expand point into circle
          boundary.geometry = boundary.geometry.buffer(radius)
      else:  # Square shape
          x, y = np.concatenate(boundary.geometry[0].xy)
          r = radius
          boundary = GeoDataFrame(
              geometry=[
                  rotate(
                      Polygon(
                          [
                              (x - r, y - r),
                              (x + r, y - r),
                              (x + r, y + r),
                              (x - r, y + r),
                          ]
                      ),
                      rotation,
                  )
              ],
              crs=boundary.crs,
          )
  
      # Unproject
      boundary = boundary.to_crs(4326)
  
      return boundary
  
file_path: prettymaps/prettymaps/fetch.py
imports: import re
  import warnings
  import numpy
  import osmnx
  from copy import deepcopy
  from shapely.geometry import box, Point, Polygon, MultiPolygon, LineString, MultiLineString
  from geopandas import GeoDataFrame
  from shapely.affinity import rotate
  from shapely.ops import unary_union
  from shapely.errors import ShapelyDeprecationWarning
label_desc: Use image node_id 2 for calling a global function with example usage: get_boundary(query, radius, circle, rotation) and returns: boundary