Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/myst.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ project:
- file: notebooks/search_and_scaling.ipynb
- file: notebooks/reading_params.ipynb
- file: notebooks/crossovers.ipynb
- file: notebooks/test_map_display.ipynb

site:
template: book-theme
Expand Down
138 changes: 138 additions & 0 deletions docs/notebooks/test_map_display.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test Map Display in Jupyter Notebooks\n",
"\n",
"This notebook tests the issue reported in GitHub #23 regarding the polar map module not displaying properly in Jupyter notebooks without cell magic.\n",
"\n",
"According to the issue:\n",
"- ✅ Works: Using `%%html` cell magic \n",
"- ❌ Doesn't work (or didn't): Using Python with `IPython.display.HTML`\n",
"\n",
"The current `polar.html` implementation now supports URL parameters, which should fix the issue."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 1: HTML Cell Magic (Should Work)\n",
"\n",
"First, let's test with the `%%html` cell magic, which was reportedly working:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": "%%html \n<iframe \n src=\"https://storage.googleapis.com/opr_stac/map/polar.html?pole=south&parquetFiles=[%22https://storage.googleapis.com/opr_stac/testing/2010_Antarctica_DC8.parquet%22]&defaultZoom=3\" \n width=\"100%\" \n height=\"600\"\n frameborder=\"0\"\n style=\"border: 1px solid #ccc; border-radius: 5px;\">\n</iframe>"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 2: Python HTML Display (Previously Broken)\n",
"\n",
"Now let's test using Python's `IPython.display.HTML`, which reportedly didn't work. \n",
"With the URL parameter support in `polar.html`, this should now work:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": "from IPython.display import IFrame, HTML\nimport json\n\ndef create_polar_map(pole='south', parquet_files=None, height=600):\n \"\"\"\n Create an embedded polar map.\n \n Parameters:\n -----------\n pole : str\n 'north' or 'south' for Arctic or Antarctic projection\n parquet_files : list\n List of parquet file paths to display\n height : int\n Height of the map in pixels\n \"\"\"\n if parquet_files is None:\n # Use a test file from GCS\n parquet_files = ['https://storage.googleapis.com/opr_stac/testing/2010_Antarctica_DC8.parquet']\n \n # Create URL parameters\n params = {\n 'pole': pole,\n 'parquetFiles': json.dumps(parquet_files),\n 'defaultZoom': 3\n }\n \n # Build query string\n query_string = '&'.join(f\"{k}={v}\" for k, v in params.items())\n \n # Create HTML with URL parameters\n html = f'''\n <iframe \n src=\"https://storage.googleapis.com/opr_stac/map/polar.html?{query_string}\"\n width=\"100%\" \n height=\"{height}\"\n frameborder=\"0\"\n style=\"border: 1px solid #ccc; border-radius: 5px;\">\n </iframe>\n '''\n \n return HTML(html)\n\n# Display the map\ncreate_polar_map(pole='south', height=500)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 3: Multiple Files with Different Colors\n",
"\n",
"Let's test the newer `fileGroups` parameter which allows displaying multiple files with different colors:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": "def create_polar_map_with_groups(pole='south', file_groups=None, height=600):\n \"\"\"\n Create an embedded polar map with file groups.\n \n Parameters:\n -----------\n pole : str\n 'north' or 'south' for Arctic or Antarctic projection\n file_groups : list of dict\n List of file groups, each with 'files' and 'color' keys\n height : int\n Height of the map in pixels\n \"\"\"\n if file_groups is None:\n # Use test files with different colors\n file_groups = [\n {\n 'files': ['https://storage.googleapis.com/opr_stac/testing/2010_Antarctica_DC8.parquet'],\n 'color': 'red'\n },\n {\n 'files': ['https://storage.googleapis.com/opr_stac/testing/2016_Antarctica_DC8.parquet'],\n 'color': 'blue'\n }\n ]\n \n # Create URL parameters\n params = {\n 'pole': pole,\n 'fileGroups': json.dumps(file_groups),\n 'defaultZoom': 3\n }\n \n # Build query string\n query_string = '&'.join(f\"{k}={v}\" for k, v in params.items())\n \n # Create HTML with URL parameters\n html = f'''\n <iframe \n src=\"https://storage.googleapis.com/opr_stac/map/polar.html?{query_string}\"\n width=\"100%\" \n height=\"{height}\"\n frameborder=\"0\"\n style=\"border: 1px solid #ccc; border-radius: 5px;\">\n </iframe>\n '''\n \n return HTML(html)\n\n# Display the map with multiple file groups\ncreate_polar_map_with_groups(pole='south', height=500)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 4: Using the Legacy CONFIG Object Method\n",
"\n",
"Let's also test the legacy method using the CONFIG object set via JavaScript:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": "def create_polar_map_legacy(pole='south', parquet_files=None, height=600):\n \"\"\"\n Create an embedded polar map using the legacy CONFIG method.\n \n Parameters:\n -----------\n pole : str\n 'north' or 'south' for Arctic or Antarctic projection\n parquet_files : list\n List of parquet file paths to display\n height : int\n Height of the map in pixels\n \"\"\"\n if parquet_files is None:\n parquet_files = ['https://storage.googleapis.com/opr_stac/testing/2010_Antarctica_DC8.parquet']\n \n config = {\n 'pole': pole,\n 'parquetFiles': parquet_files,\n 'defaultZoom': 3\n }\n \n # Create HTML with embedded configuration\n html = f'''\n <iframe \n src=\"https://storage.googleapis.com/opr_stac/map/polar.html\"\n width=\"100%\" \n height=\"{height}\"\n frameborder=\"0\"\n style=\"border: 1px solid #ccc; border-radius: 5px;\"\n onload=\"this.contentWindow.CONFIG = {json.dumps(config)}\">\n </iframe>\n '''\n \n return HTML(html)\n\n# Display the map using legacy CONFIG method\ncreate_polar_map_legacy(pole='south', height=500)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 5: Arctic (North Pole) Example\n",
"\n",
"Let's also test with Arctic data to ensure the north pole projection works:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": "# Test with north pole (Arctic)\ndef create_arctic_map():\n # Note: Using Antarctica data but displaying on north pole projection for testing\n # In production, you'd use actual Arctic/Greenland data files\n parquet_files = ['https://storage.googleapis.com/opr_stac/testing/2010_Antarctica_DC8.parquet']\n \n params = {\n 'pole': 'north',\n 'parquetFiles': json.dumps(parquet_files),\n 'defaultZoom': 3\n }\n \n query_string = '&'.join(f\"{k}={v}\" for k, v in params.items())\n \n html = f'''\n <iframe \n src=\"https://storage.googleapis.com/opr_stac/map/polar.html?{query_string}\"\n width=\"100%\" \n height=\"500\"\n frameborder=\"0\"\n style=\"border: 1px solid #ccc; border-radius: 5px;\">\n </iframe>\n '''\n \n return HTML(html)\n\ncreate_arctic_map()"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary\n",
"\n",
"With the current implementation of `polar.html` that supports URL parameters:\n",
"\n",
"1. **✅ HTML Cell Magic** - Should continue to work as before\n",
"2. **✅ Python HTML Display** - Now works with URL parameters (previously broken)\n",
"3. **✅ File Groups** - New feature for displaying multiple files with different colors\n",
"4. **✅ Legacy CONFIG Method** - Should still work for backward compatibility\n",
"5. **✅ Both Poles** - Support for both Arctic and Antarctic projections\n",
"\n",
"The issue reported in GitHub #23 should now be resolved since the map can receive configuration via URL parameters, which works correctly when generated from Python code."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}