diff --git a/community/aaryan/Airports_visualizer/Airports_visualizer.py b/community/aaryan/Airports_visualizer/Airports_visualizer.py
new file mode 100644
index 00000000..f1a2cd62
--- /dev/null
+++ b/community/aaryan/Airports_visualizer/Airports_visualizer.py
@@ -0,0 +1,40 @@
+@fused.udf
+def udf(
+ path: str = 's3://fused-users/fused/aaryan/airports.csv',
+ bounds: fused.types.TileGDF = None,
+ airport_type: str = None,
+ continent: str = None,
+ min_elevation: float = None,
+ scheduled_service: str = None,
+ use_columns: list = None
+):
+ """
+ Returns airport data as a GeoDataFrame with visualization parameters.
+ """
+ import geopandas as gpd
+ import pandas as pd
+ from shapely.geometry import Point
+
+ df = pd.read_csv(path)
+
+ geometry = [Point(xy) for xy in zip(df.longitude_deg, df.latitude_deg)]
+ gdf = gpd.GeoDataFrame(df, geometry=geometry)
+
+ if airport_type:
+ gdf = gdf[gdf.type == airport_type]
+ if continent:
+ gdf = gdf[gdf.continent == continent]
+ if min_elevation:
+ gdf = gdf[gdf.elevation_ft >= min_elevation]
+ if scheduled_service:
+ gdf = gdf[gdf.scheduled_service == scheduled_service]
+
+ if bounds is not None:
+ gdf = gdf[gdf.geometry.intersects(bounds.geometry.iloc[0])]
+
+ # Select columns
+ if use_columns:
+ keep_cols = list(set(use_columns + ['geometry']))
+ gdf = gdf[keep_cols]
+
+ return gdf
diff --git a/community/aaryan/Airports_visualizer/README.MD b/community/aaryan/Airports_visualizer/README.MD
new file mode 100644
index 00000000..7f402c90
--- /dev/null
+++ b/community/aaryan/Airports_visualizer/README.MD
@@ -0,0 +1,5 @@
+
+

+
+
+Read a CSV or TSV file.
diff --git a/community/aaryan/Airports_visualizer/meta.json b/community/aaryan/Airports_visualizer/meta.json
new file mode 100644
index 00000000..59d75984
--- /dev/null
+++ b/community/aaryan/Airports_visualizer/meta.json
@@ -0,0 +1,74 @@
+{
+ "version": "0.0.3",
+ "job_config": {
+ "version": "0.0.3",
+ "name": null,
+ "steps": [
+ {
+ "type": "udf",
+ "udf": {
+ "type": "geopandas_v2",
+ "name": "Airports_visualizer",
+ "entrypoint": "udf",
+ "parameters": {},
+ "metadata": {
+ "fused:vizConfig": {
+ "tileLayer": {
+ "@@type": "TileLayer",
+ "minZoom": 0,
+ "maxZoom": 19,
+ "tileSize": 256,
+ "pickable": true
+ },
+ "rasterLayer": {
+ "@@type": "BitmapLayer",
+ "pickable": true
+ },
+ "vectorLayer": {
+ "@@type": "GeoJsonLayer",
+ "stroked": true,
+ "filled": false,
+ "pickable": true,
+ "lineWidthMinPixels": 1,
+ "pointRadiusMinPixels": 1,
+ "getLineColor": {
+ "@@function": "colorContinuous",
+ "attr": "value",
+ "domain": [
+ 0,
+ 10
+ ],
+ "colors": "Teal",
+ "nullColor": [
+ 184,
+ 184,
+ 184
+ ]
+ },
+ "getFillColor": [
+ 208,
+ 208,
+ 208,
+ 40
+ ]
+ }
+ },
+ "fused:udfType": "auto",
+ "fused:slug": "Airports_visualizer",
+ "fused:name": "Airports_visualizer",
+ "fused:defaultParameters": [],
+ "fused:mcp": {
+ "description": "Read a CSV or TSV file.\n",
+ "parameters": "[\n {\n \"name\": \"foo\",\n \"type\": \"string\"\n },\n {\n \"name\": \"string-param\",\n \"type\": \"string\"\n }\n]"
+ },
+ "fused:assetUrl": "https://fused-magic.s3.amazonaws.com/thumbnails/preview/fusedlabs/fusedudfs/Airports_visualizer/3e212a38-5524-48b1-84fc-c7753648e365",
+ "fused:description": "Read a CSV or TSV file.\n"
+ },
+ "source": "Airports_visualizer.py",
+ "headers": []
+ }
+ }
+ ],
+ "metadata": null
+ }
+}
\ No newline at end of file