{ "cells": [ { "cell_type": "markdown", "id": "f28e79dc-0b72-48e6-a1cb-fefaae8125c3", "metadata": {}, "source": [ "# Example vis 2a" ] }, { "cell_type": "code", "execution_count": 1, "id": "needed-niger", "metadata": {}, "outputs": [], "source": [ "from math import ceil\n", "import pystare as ps\n", "\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import matplotlib.tri as tri\n", "import cartopy.crs as ccrs\n", "\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "id": "suspended-stanley", "metadata": {}, "outputs": [], "source": [ "def shiftarg_lon(lon):\n", " \"If lon is outside +/-180, then correct back.\"\n", " if(lon>180):\n", " return ((lon + 180.0) % 360.0)-180.0\n", " else:\n", " return lon\n", "\n", "def triangulate1(lats,lons):\n", " \"Prepare data for tri.Triangulate.\"\n", " print('triangulating1...')\n", " intmat=[]\n", " npts=int(len(lats)/3)\n", " k=0\n", " for i in range(npts):\n", " intmat.append([k,k+1,k+2])\n", " k=k+3\n", " for i in range(len(lons)):\n", " lons[i] = shiftarg_lon(lons[i])\n", " print('triangulating1 done.') \n", " return lons,lats,intmat\n", "\n", "def plot1(lon,lat,lons,lats,triang,c0='r',c1='b',transf=None,lw=1):\n", " # if(lon is not None):\n", " if True:\n", " x=np.zeros([lon.size+1],dtype=np.double);x[:-1]=lon[:];x[-1]=lon[0]\n", " y=np.zeros([lat.size+1],dtype=np.double); y[:-1]=lat[:]; y[-1]=lat[0]\n", " ax.plot(x,y,True,transform=transf,c=c0)\n", " plt.triplot(triang,c1+'-',transform=transf,lw=lw,markersize=3)\n", " # plt.scatter(lons,lats,s=10,c=c1,transform=ccrs.PlateCarree())\n", " return\n", "\n", "def make_hull(lat0,lon0,resolution0):\n", " hull0 = ps.to_hull_range_from_latlon(lat0,lon0,resolution0)\n", " print('hull0 len: ',len(hull0),type(hull0))\n", " lath0,lonh0,lathc0,lonhc0 = ps.to_vertices_latlon(hull0)\n", " lons0,lats0,intmat0 = ps.triangulate(lath0,lonh0)\n", " print('lons0 len: ',len(lons0))\n", " print('intmat len: ',len(intmat0),type(intmat0))\n", " triang0 = tri.Triangulation(lons0,lats0,intmat0)\n", " for i in range(len(intmat0)):\n", " print(i,intmat0[i],lons0[intmat0[i]],lats0[intmat0[i]])\n", " print('triang ',triang0.triangles.shape)\n", " # exit()\n", " return lats0,lons0,triang0,hull0" ] }, { "cell_type": "code", "execution_count": 3, "id": "ready-glossary", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hull0 len: 10 \n", "lons0 len: 30\n", "intmat len: 10 \n", "0 [0, 1, 2] [15.35858327 21.90167434 30.20648377] [ 4.85020585 -5.46142928 2.5084551 ]\n", "1 [3, 4, 5] [-14.63880654 -8.97828322 0.415556 ] [ 8.42105871 -1.3114612 6.86746932]\n", "2 [6, 7, 8] [15.35858327 0.415556 6.11345602] [ 4.85020585 6.86746932 -3.1316658 ]\n", "3 [9, 10, 11] [ 6.11345602 0.415556 -8.97828322] [-3.1316658 6.86746932 -1.3114612 ]\n", "4 [12, 13, 14] [15.35858327 6.11345602 21.90167434] [ 4.85020585 -3.1316658 -5.46142928]\n", "5 [15, 16, 17] [-14.63880654 0.415556 -8.02332385] [ 8.42105871 6.86746932 22.0035996 ]\n", "6 [18, 19, 20] [15.35858327 8.4459729 0.415556 ] [ 4.85020585 20.22249681 6.86746932]\n", "7 [21, 22, 23] [ 8.4459729 -8.02332385 0.415556 ] [20.22249681 22.0035996 6.86746932]\n", "8 [24, 25, 26] [15.35858327 30.20648377 26.56505138] [ 4.85020585 2.5084551 17.54840083]\n", "9 [27, 28, 29] [15.35858327 26.56505138 8.4459729 ] [ 4.85020585 17.54840083 20.22249681]\n", "triang (10, 3)\n", "hull0: 10\n", "graphics-0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# resolution = 5\n", "# resolution = 4\n", "resolution = 3\n", "\n", "resolution0 = resolution;\n", "\n", "# lat0 = np.array([ 10, 5, 60,70], dtype=np.double)\n", "# lon0 = np.array([-30,-20,60,10], dtype=np.double)\n", "\n", "lat0 = np.array([0, 0,10,10], dtype=np.double)\n", "lon0 = np.array([0,20,20,0], dtype=np.double)\n", "\n", "lats0,lons0,triang0,hull0 = make_hull(lat0,lon0,resolution0)\n", "print('hull0: ',len(hull0))\n", "\n", "# Set up the projection and transformation\n", "proj = ccrs.PlateCarree()\n", "# proj = ccrs.Robinson() # Drives spurious IllegalArgumentException: Argument must be Polygonal or LinearRing\n", "# proj = ccrs.Mollweide() # Drives spurious IllegalArgumentException: Argument must be Polygonal or LinearRing\n", "# transf = ccrs.Geodetic()\n", "transf = ccrs.PlateCarree()\n", "plt.figure()\n", "plt.subplot(projection=proj,transform=transf)\n", "ax = plt.axes(projection=proj,transform=transf)\n", "ax.set_global()\n", "ax.coastlines()\n", "print('graphics-0')\n", "plot1(lon0,lat0,lons0,lats0,triang0,c0='r',c1='b',transf=transf)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "id": "social-windsor", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "85b6dffe-c828-4de6-b8eb-005218144b57", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }