{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 47 Delaunay Triangulation of Shapely Multipoints\n", "\n", "Similar to the Delaunay triangulation for GeoDataFrames to return a PolyData dataset, the triangulation can also be performed on Shapely MultiPoints. \n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set File Paths and download Tutorial Data\n", "\n", "If you downloaded the latest `GemGIS` version from the Github repository, append the path so that the package can be imported successfully. Otherwise, it is recommended to install `GemGIS` via `pip install gemgis` and import `GemGIS` using `import gemgis as gg`. In addition, the file path to the folder where the data is being stored is set. The tutorial data is downloaded using Pooch (https://www.fatiando.org/pooch/latest/index.html) and stored in the specified folder. Use `pip install pooch` if Pooch is not installed on your system yet." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-03-17T12:13:27.437254Z", "start_time": "2021-03-17T12:13:25.303274Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`\n", "C:\\Users\\ale93371\\Anaconda3\\envs\\test_gempy\\lib\\site-packages\\theano\\configdefaults.py:560: UserWarning: DeprecationWarning: there is no c++ compiler.This is deprecated and with Theano 0.11 a c++ compiler will be mandatory\n", " warnings.warn(\"DeprecationWarning: there is no c++ compiler.\"\n", "WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.\n", "WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.\n" ] } ], "source": [ "import gemgis as gg\n", "\n", "file_path ='data/47_delaunay_triangulation_of_shapely_multipoints/'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create Shapely Multipoint\n", "\n", "A multipoint object is created from two NumPy arrays consisting of random coordinate pairs to demonstrate the delaunay triangulation of Shapely." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-01-13T19:07:49.326612Z", "start_time": "2021-01-13T19:07:45.227862Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`\n", "C:\\Users\\ale93371\\Anaconda3\\envs\\test_gempy\\lib\\site-packages\\theano\\configdefaults.py:560: UserWarning: DeprecationWarning: there is no c++ compiler.This is deprecated and with Theano 0.11 a c++ compiler will be mandatory\n", " warnings.warn(\"DeprecationWarning: there is no c++ compiler.\"\n", "WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.\n", "WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.\n" ] }, { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import gemgis as gg\n", "from shapely.geometry import MultiPoint\n", "import numpy as np\n", "\n", "x = np.random.randint(0,10,11)\n", "y = np.random.randint(0,10,11)\n", "\n", "points = np.array([x,y])\n", "\n", "multipoints = MultiPoint(points.T)\n", "multipoints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Performing the Triangulation\n", "\n", "The function ``triangulate(..)`` of the shapely.ops module is used to perform the triangulation. The result is a list of polygons consisting of three vertices. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-01-13T19:07:49.342307Z", "start_time": "2021-01-13T19:07:49.328597Z" } }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from shapely.ops import triangulate\n", "\n", "triangles = triangulate(multipoints)\n", "triangles" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating GeoDataFrames\n", "\n", "A GeoDataFrame is created from the Polygons and MultiPoints for plotting. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-01-13T19:07:49.374250Z", "start_time": "2021-01-13T19:07:49.345225Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometry
0POLYGON ((1.00000 4.00000, 2.00000 3.00000, 4....
1POLYGON ((1.00000 4.00000, 4.00000 4.00000, 6....
2POLYGON ((1.00000 4.00000, 6.00000 8.00000, 6....
3POLYGON ((6.00000 9.00000, 6.00000 8.00000, 8....
4POLYGON ((8.00000 7.00000, 6.00000 8.00000, 8....
5POLYGON ((8.00000 7.00000, 8.00000 6.00000, 9....
6POLYGON ((9.00000 1.00000, 8.00000 6.00000, 8....
7POLYGON ((9.00000 1.00000, 8.00000 4.00000, 6....
8POLYGON ((9.00000 1.00000, 6.00000 3.00000, 4....
9POLYGON ((4.00000 2.00000, 6.00000 3.00000, 4....
10POLYGON ((4.00000 2.00000, 4.00000 4.00000, 2....
11POLYGON ((4.00000 4.00000, 6.00000 3.00000, 8....
12POLYGON ((4.00000 4.00000, 8.00000 6.00000, 6....
13POLYGON ((8.00000 6.00000, 6.00000 3.00000, 8....
\n", "
" ], "text/plain": [ " geometry\n", "0 POLYGON ((1.00000 4.00000, 2.00000 3.00000, 4....\n", "1 POLYGON ((1.00000 4.00000, 4.00000 4.00000, 6....\n", "2 POLYGON ((1.00000 4.00000, 6.00000 8.00000, 6....\n", "3 POLYGON ((6.00000 9.00000, 6.00000 8.00000, 8....\n", "4 POLYGON ((8.00000 7.00000, 6.00000 8.00000, 8....\n", "5 POLYGON ((8.00000 7.00000, 8.00000 6.00000, 9....\n", "6 POLYGON ((9.00000 1.00000, 8.00000 6.00000, 8....\n", "7 POLYGON ((9.00000 1.00000, 8.00000 4.00000, 6....\n", "8 POLYGON ((9.00000 1.00000, 6.00000 3.00000, 4....\n", "9 POLYGON ((4.00000 2.00000, 6.00000 3.00000, 4....\n", "10 POLYGON ((4.00000 2.00000, 4.00000 4.00000, 2....\n", "11 POLYGON ((4.00000 4.00000, 6.00000 3.00000, 8....\n", "12 POLYGON ((4.00000 4.00000, 8.00000 6.00000, 6....\n", "13 POLYGON ((8.00000 6.00000, 6.00000 3.00000, 8...." ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "\n", "gdf = gpd.GeoDataFrame(geometry=triangles)\n", "gdf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-01-13T19:07:49.390236Z", "start_time": "2021-01-13T19:07:49.377233Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometry
0MULTIPOINT (2.00000 3.00000, 8.00000 7.00000, ...
\n", "
" ], "text/plain": [ " geometry\n", "0 MULTIPOINT (2.00000 3.00000, 8.00000 7.00000, ..." ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_points = gpd.GeoDataFrame(geometry=[multipoints])\n", "gdf_points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting the Results\n", "\n", "The result of the triangulation can be plotted. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-01-13T19:07:49.678298Z", "start_time": "2021-01-13T19:07:49.393236Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAGoCAYAAADrUoo3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABGaUlEQVR4nO3de3iU9Zk//vdkMpkkkxOnEEiC0CYIRA6BgIDsAlm+tV62WNst2tqf2wM/RLG7l7RWr1q3/rbbqnVrtbpqW1tbyrZW7a61W/XbingoYuSYSARJlGASyBEmh0kyM5k8vz/ixCfDHJ6ZeQ6f53ner+vqxWUyh1sb5p37/tzzjEOSJAlEREQGyjC6ACIiIoYREREZjmFERESGYxgREZHhGEZERGS4TC0ffGRkBMeOHcOMGTPgdDq1fCoiIhJYKBRCd3c3LrnkEmRnZ1/wfU3D6NixY7juuuu0fAoiIjKR//qv/0JNTc0FX9c0jGbMmDHx5CUlJSk9ht/vR1NTEyorK+F2u9UsTxNmqxcwX82sV1usV1tmqxdQp+aOjg5cd911E7kQSdMwCo/mSkpKUFZWltJjjIyMwOv1orS0NGprJxqz1QuYr2bWqy3Wqy2z1QuoW3OsIxsuMBARkeEYRkREZDiGERERGY5hREREhmMYERGR4RhGRERkOIYREREZjmFERESGYxgREZHhGEZERGQ4RWG0f/9+fOYzn0F1dTWuueYa1NfXa10XERnE4WtBnq8ODl+L0aWQjSQMo7a2Ntx444344he/iAMHDuDGG2/Etm3b0N3drUd9RKSXjpeBPZuQtedSXNy2A1kvrwb2bAI69xpdGdlAwjB67bXXMH/+fGzZsgWZmZnYsGEDlixZghdffFGP+ohIDx0vA/v/CejcA8doPwDAEewDOvcAb1w//n0iDSUMo7GxsQuu0pqRkYHTp09rVhQR6azxB8BwW/TvDbcB79ytbz1kOwk/QmLdunX4j//4D7zwwgvYtGkT9u/fjzfffBPFxcWKn8Tv92NkZCSlAv1+/6Q/RWe2egHz1cx61eXwnUJW7wE44txG6nkLgd4TkDxz9SpLMdH/+0YyW72AOjUnuq9DkiQp0YO88soruP/++9HZ2Yn169cjKysLBQUF+Na3vhX3fm1tbfiHf/gHPPjggzE/UImIjJXnq8PFbTsS3u7dskcx6FmpQ0VkRd3d3fiXf/kX7NmzJ+rn2yXsjAYHBzFr1iw899xzE1/bsmULrr/+esVFVFZWorS0VPHt5fx+P5qbm1FRUWGKT0U0W72A+Wpmvepy+HIhdRRMnBVFI2UWYG7VBmE7I5H/+0YyW72AOjW3t7fH/X7CMPJ6vbj22muxe/duVFZW4umnn8aZM2dQW1uruAi32532pwOq8Rh6Mlu9gPlqZr0qyV6I0NQaOLtiLyk4pq+Ce9oCHYtKnrD/fWMwW71AejUnCrGEYVRWVoa77roLX//61+H1elFVVYUnnngCubm5KRVERGIZCYZwf+vn8GVHPWZn9V7w/e7QDGRXfAv5BtRG9pEwjADgqquuwlVXXaV1LUSks5FgCNt+cwivnbwIDZ6d2FH8NJbknkShcwh9oVw0DM3Hw11bMOTNwe6tQRTmuIwumSxKURgRkfV8FETjb2B/07cUb55aijJXBz6W04X3h4vRFiwZv7GvD196vA67t17KQCJN8Np0RDYUGURybcESvDW09KMg+tDb7eOB1Dcc1KtMshGGEZHNxAuiRBhIpBWGEZGNpBNEYQwk0gLDiMgm1AiiMAYSqY1hRGQDagZRGAOJ1MQwIrI4LYIojIFEamEYEVmYlkEUxkAiNTCMiCxKjyAKYyBRuhhGRBakZxCFMZAoHQwjIosxIojCGEiUKoYRkYUYGURhDCRKBcOIyCJECKIwBhIli2FEZAEiBVEYA4mSwTAiMjkRgyiMgURKMYyITEzkIApjIJESDCMikzJDEIUxkCgRhhGRCZkpiMIYSBQPw4jIZMwYRGEMJIqFYURkImYOojAGEkXDMCIyCSsEURgDiSIxjIhMwEpBFMZAIjmGEZHgrBhEYQwkCmMYEQnMykEUxkAigGFEJCw7BFEYA4kYRkQCslMQhTGQ7I1hRCQYOwZRGAPJvhhGRAKxcxCFMZDsiWFEJAgG0UcYSPbDMCISAIPoQgwke2EYERmMQRQbA8k+GEZEBmIQJcZAsgeGEZFBGETKMZCsj2FEZAAGUfIYSNbGMCLSmehBVObqwOrcoyhzdRhdygUYSNaVqeRGhw8fxr//+7+jpaUFM2bMwM0334xPf/rTWtdGZDkiB9FqTz1uLn4Ki3ObUOgcQl8oF28PVeKhrmtQ51tidHkTwoG0e+ulKMxxGV0OqSRhZxQKhbBjxw5s27YNhw8fxve//33cfvvtaGtr06M+IsvwCx5E95ffj3X59Sh0DgEACp1DWJdfjx+X/wirPfUGVzgZOyTrSRhG/f39OHfuHEKhECRJgsPhgMvlgtPp1KM+IksIhCTseLJByCACgJuLn8LsrN6o35ud1YsdxU/rXFFi4UDqZyBZQsIx3ZQpU/DFL34RO3fuxK233oqxsTF8//vfx6xZsxQ/id/vx8jISEoF+v3+SX+Kzmz1Auar2Wz19vuGce++8zjaGTC6lKjKszqwJPdk3NssyT2JMlcH2oIlOlWlzNvtffjyrw/j9ktzTfPzYLafX0CdmhPdN2EYjY2NITs7Gw8++CBqa2vxxhtv4Bvf+AaqqqqwYMECRUU0NTXB6/Uqum0szc3Nad1fb2arFzBfzWaoNxCShA4iACh3daDAORz3NoXOIZRndQoXRgDwTscg/r/XRvBdnIQnyzw7WWb4+Y2UTs3d3fGnAgnD6C9/+QsaGhpw2223AQA2bNiADRs24Nlnn8Xtt9+uqIjKykqUlpYqum0kv9+P5uZmVFRUwO12p/QYejJbvYD5ajZLvf5gCDuebBA6iACgNViC/lBO3EDqD+WiNTBTx6qS8975UdxTN4Rf/dNyFAi+1GCWn185NWpub2+P+/2EYXT27FkEApP/MmVmZiIzU9EiHgDA7XYjOztb8e21egw9ma1ewHw1i1zvSDCEr/+2AX9775zRpSTUGijB+6FFWOY8FPM2x/0XY3bpInS2nkcwJOlYnXLvdAzia7vrTbNlJ/LPbyzp1JwoxBL2tGvXrsXx48fxhz/8AZIk4a233sJf//pXXH755SkVRGR1Iq9vR3I4gEvnTcXdrZ/DmcC0qLfpGZuBB89+Hm+1nMOU3CysmjsVLqdD50qV4ZadeSUMo4svvhg/+clPsGvXLqxYsQL/9m//hnvvvReLFy/Woz4iUzFTEOW5M7GkrBB1p86hzrcEDw19B68PLENfKBcA0BfKxesDy7Dj1C0Ynvr3cDqArgG/8KHEQDInRbO22tpa1NbWal0LkamZKYjKp+QAAOpb+ya+diSwHL/rqESZqwPlWZ1oDcz8aGHB50V1eREa2rwISeOh1DXgR3G+G3OneXBEsPEd3xhrPuZZPSESmJmCaGlZIc77Amg9/9HCQtXsfJzoGAAAtAVLsN+39ILNuSOtXiwpK4K8GRK5U2KHZC4MI6I0mSWIwudD9W19GAyEJn0vNKbsMaIFEiBuKDGQzINhRJQGswSR/HwokrwrUiJWIAFihhIDyRwYRkQpMksQlU/JwZRc16TzITmlXZFcvEACxAslBpL4GEZEKTBLEEU7H5JLtiuSSxRIgFihxEASG8OIKElmCKJ450NyqXRFckoCCRAnlBhI4mIYESXBDEEU73xILp2uSE5pIAFihBIDSUwMIyKFzBBEic6H5NLtiuSSCSTA+FBiIImHYUSkgBmCKNH5kJxaXZFcsoEEGBtKDCSxMIyIEhA9iJSeD8mp2RXJpRJIgHGhxEASB8OIKA7Rg0jp+ZCcFl2RXKqBBBgTSgwkMTCMiGIQPYiSOR+S06orkksnkAD9Q4mBZDyGEVEUogdRMudDclp3RXLpBhKgbygxkIzFMCKKIHIQpXI+JKdHVySnRiAB+oUSA8k4DCMiGZGDKJXzITk9uyI5tQIJ0CeUGEjGYBgRfUjkIEr1fEhO765ITs1AAiaHUs2cQmSqnEkMJP0xjIggdhClej4kZ1RXJKd2IAHjoXTwgz7kuzNQM6dQ1U6JgaQvhhHZnqhBlO75kJyRXZGcFoEEAOdHxnDwgz7Vx3cMJP0wjMjWRA2idM+H5EToiuS0CiRAmzMlBpI+GEZkW6IGkRrnQ3KidEVyWgYSoH4oMZC0xzAiWxI1iNQ4H5ITrSuS0zqQAHVDiYGkLYYR2Y6IQaTm+ZCciF2RnB6BBKgXSgwk7TCMyFZEDCI1z4fkRO6K5PQKJECdUGIgaYNhRLYhYhCpfT4kJ3pXJKdnIAHphxIDSX0MI7IFEYNI7fMhObN0RXJ6BxKQXigxkNTFMCLLEy2ItDofkjNTVyRnRCABqYcSA0k9DCOyNNGCSKvzITkzdkVyRgUSkFooMZDUwTAiyxItiMqKsjU7H5Iza1ckZ2QgAcmHEgMpfQwjsiTRgqhiSibOD2lzPiRn9q5IzuhAApILJQZSehhGZDkiBZHDAay8qAjN50fhC2jfslihK5ITIZAA5aHEQEodw4gsRaQgCp8PHTjt1eX5rNQVyYkSSICyUGIgpYZhRJYhUhBp+f6hWKzWFcmJFEhA4lBiICWPYUSWIFIQafn+oVis2hXJiRZIQPxQYiAlh2FEpidKEOnx/qFYrNwVyYkYSEDsUIoWSA5fC/J8dXD4WgyqVkyZiW7w3HPP4bvf/e6krw0PD+Pzn/88vve972lWGJESogRRnjsTHy/2aPr+oViqZuej8Yy1uyK5I61eVJcXoaHNi5BkdDWTdQ340TXgR3G+G3OneXCk9fxEIP1u8xDymn+IrN4DuHi0H1JnITC1BrjkDmDmRqNLN1zCMNq8eTM2b9488c/79+/Hrbfeih07dmhaGFEi/mAIX/9tg+FBVD4lBwB0PR+Ss0tXJCdyIAEXhlJW714Mv/YA8pzdCDd1jmAf0LkH6H8XWPNroKTW0JqNltSYzufz4bbbbsNdd92FkpISrWoiSigQkrDjSeODyIjzITk7nBXFIurITi48vvvnmU9jhjPGz+pwG/DO3foWJqCEnZHc448/jvnz52PTpk1JPYnf78fIyEhS95HfV/6n6MxWL2C+mvt9w7h333kc7QwYVoMDQM1FRbqtbccyKmJboKMjrV4snp2HxjODELVBLM/qwAL3u3FvI/W8hUDvCUieufoUlSQ1XiMS3VdxGPl8PuzevRs///nPky6iqakJXq836fvJNTc3p3V/vZmtXsAcNQdCkuFBlJPpQGm+0/AgmleUiXc7Bw2tQQRvnxlE5VQX3jsXFDKQyl0dKHDG75wdo/1oaXwFg56VOlWVmnReI7q7408xFIfRSy+9hNmzZ2PZsmVJF1FZWYnS0tKk7weMp2lzczMqKirgdrtTegw9ma1ewDw1+4Mh7HiywdAgKivKBgA0n0+t01dTljsbAMMIAJrOBbF4dh7eOTso3BlSa7AE/aGcuIEkZRZgbtUGoTujdF8j2tvb435fcRjt3bsXV1xxRUpFuN1uZGdnp3RfNR9DT2arFxC75pEPlxX+9p7+22phS8sK8V7XoO5r29HYbYNOibfPDAq51NAaKEHD0Hysy6+PeRvH9FVwT1ugY1WpSec1IlGIKV5gqK+vT6krIkqX0evbRr5/KBY7btApIepSw0Nd1+BMYFr0b+aUAVXf1rcgASkKo1AohI6ODsyYMUPreogmMTqI9Pj8oWTZeYNOCREDqc63BDtbd+L1gWXoC+UCAELOAqBkE7B2F99nBIVjOqfTiePHj2tdC9EkRgeR0e8fioVdUWIivg/pTd9SvHlqKcpcHVg7vRdXrL0MG1deZnRZwuDlgEhIRgeR0e8fioVdkXIidkgA0BYsQUNgGY71xRjb2RTDiIRjZBCJeD4kx64oOaIGEgA0d/mMLkEoDCMSipFBJOL5kBy7otSIGkhN3QwjOYYRCcPIIDLi84eSxa4odSIG0qkeHyRJkAMtATCMSAhGBpGo50Ny7IrSJ1ogDQfH0HpO3J85vTGMyHBGBZHo50Ny7IrUIVognezkLxhhDCMylFFBJPr5kBy7InWJFEhNXbycUxjDiAxjVBCZ4XxIjl2R+kQJpCZ2RhMYRmQIo4LIDOdDcuyKtCNCIJ3s4v+3YQwj0p0RQWSm8yE5dkXaMjqQ3uviRl0Yw4h0ZUQQmel8SI5dkT6MDKThYIgbdR9iGJFujAgis50PybEr0o+RgcSNunEMI9KFEUFktvMhOXZF+jMqkLhRN45hRJrTO4jMej4kx67IGEYEEjfqxjGMSFN6B5FZz4fk2BUZS+9A4kbdOIYRaUbvIDLz+ZAcuyLj6RlI3KgbxzAiTegdRGY+H5JjVyQOvQKJG3XjGEakOj2DyArnQ3LsisSiVyBxo45hRCrTM4g8bqfpz4fk2BWJSY9A4kYdw4hUpGcQFXucmJJj/vMhOXZF4tI6kLhRxzAilegZRItL8zEwEkKbd0Tz59ILuyLxaRlI3KhjGJEK9Aqi8PnQ2+0DGDb/8dAk7IrMQatA4kYdw4jSpFcQWeH9Q7GwKzIXLQKJG3UMI0qDXkFklfcPxcKuyHy0CCS7b9QxjCglegWRVd4/FAu7IvNSO5DsvlHHMKKk6RFEVnv/UCzsisxNzUCy+0Ydw4iSokcQWfl8SI5dkTWoFUh236hjGJFiegSR1c+H5NgVWYcagWT3jTqGESmiRxBZ/XxIjl2R9aQbSHbfqGMYUUJaB5Fdzofk2BVZU7qBZOeNOoYRxaV1ENnlfEiOXZG1pRNIdt6oYxhRTFoHkZ3Oh+TYFVlfqoFk5406hhFFpXUQ2el8SI5dkX2kEkh23qhjGNEFtAwiO54PybErspdogVTm6sDSrCMoc3VccHs7b9RlKrlRR0cHvvvd7+LAgQPIy8vD1q1bcf3112tdGxlAyyDKc2fi48UeW50PyS0sycNxdkW2c6TVi+ryIuSeexU3Fj+FxblNKHQOoW9qLt4eqsRDXdegzrcEwEcbdXOm5Rpctf4SdkaSJOGmm27Cxz72MdTV1eEXv/gFHn74YRw+fFiP+khHfg2DyK7nQ3Jj9vyFlwC4z72KB+c9gHX59Sh0DgEACp1DWJdfjx+X/wirPfUTt7XrRl3CMKqvr0dXVxe++c1vwuVyobKyEk8++STmzZunR32kk0BIwo4nGzQJIrueD8nNK8rEu5323ZSyu5uLn8L0jOh/t2Zn9WJH8dMT/2zXjbqEY7rGxkZUVlbivvvuw5/+9Cfk5eVh+/btuPrqqxU/id/vx8hIah+E5vf7J/0pOrPVCwD9vmHcu+88jnYGVH1cB4Cai4pw4LRX1cc1I3ZF9lWe1YEluSfj3mZJ7kmUuTrQFizBiTPelF8vtaLG61qi+yYMo76+PtTV1WH16tXYu3cvjh07hq1bt6K8vBw1NTWKimhqaoLX61V021iam5vTur/ezFJvICRpEkQ5mQ6U5jsZRBjvik55R40ugwxS7upAgTP+VKDQOYTyrE60BUvw9gc9aGxs1Km65KTzutbdHX/qkjCMsrKyUFhYiBtuuAEAsHz5clx++eXYs2eP4jCqrKxEaWmpottG8vv9aG5uRkVFBdxud0qPoScz1esPhrDjyQbVg6isKBsA0HxerN/ujJLpygLAMLKr1mAJ+kM5cQOpL5SL1sBMAMBZ3xgWLVoEh0ODzzdPkRqva+3t7XG/nzCM5s2bh+HhYYyOjiIzc/zmoVAoqfVDt9uN7OxsxbfX6jH0JHq9I8EQvv7bBvztPXU325aWFeK9rkFbrm1HUzU7H41n7HkgTYAzw4HiWQtwMrgANc4jMW/XMDQfbcESAMBwcAzdQxLmTMvRq0zF0nldSxRiCRcYLrvsMhQUFOBHP/oRRkdHcfjwYfz1r3/FJz/5yZQKIuNpsb5t9/cPxcL3FdmTM8OBFRcVYVZhNg6d9uK+9s/jTGBa1NueCUzDw11bJn3Njht1CcMoOzsbv/nNb3Dy5EmsXbsW3/zmN/Gd73wHy5Yt06E8UpsWQWTH68spwast2E9kCLV9uEFa51uCx4PfxesDy9AXGn8P0eCYB68PLMMtrd+YeJ9RmB036hS96fWiiy7CL37xC61rIY1pEUTlU8ZHCXZ+/1As7Irsw5nhwLLyQnT2+3EoytLO3Gm5+E3Lx/HL0L+jzNWBtTN64cuahz+3RH9zqx2vUacojMj8tAging/FxrMie0gUQgDgdACZGRkIhsbP2duCJWgIlCPHmQsg+i9xdrxGHcPIBtQOIocDWDV3KsdycbArsjYlIRRWE+PvStdA7PfdhK9RJ9JGndZ4oVSLUzuIeD6UGM+KrCvWmVAsc6fl4vAH56N+74x3BHlZzqjfs+OnvjKMLEztIOL15ZRhV2Q9yYYQcOF4LpIEoHxq7Aui2m2jjmFkUWoHEa8vpwy7ImtJJYTCauZORXN3/K24ghxXzO/ZbaOOZ0YWpGYQ8XwoOeyKrCGZM6Fo4o3n5IJxfmDstlHHMLIYNYPI7p8/lCxu0JlfuiEEJB7PycVbYrDbRh3DyELUDCK+fyh57IrMS40QCou1PRdNu3cYeVnOqG+PsNtGHc+MLELNIOL5UPJ4VmRO6ZwJRaN0PBcmSbGXGOy2UcfOyALUCiIHgFXzeD6UCnZF5qJmJzTxmEmM5+TiLTGc7BywzUeQszMyObWCKCfTgcWz8xlEKWBXZB5qd0JySrbnoom7xGCjjTp2RiamVhCVFWUjEAiggYfvKWFXJD4tOiG5ZMdzcvGWGOy0UccwMim1gmhpWSGauwbgC/AVNRXcoBOb1iEEpD6eC4u3xGCnjTqO6UxIjSCSf/4Qgyh17IrEpOU4LlKq47mweEsM4Y06O2BnZDJqBBHfP6QOdkXi0aMTkktnPCcXa4khvFFnhyUGhpGJqBFEfP+QetgViSPDMT5y7h4M6BJCQPrjObl4Swx22ajjmM4k1Agivn9IPdygE4Mzw4Hq8kJMz83AkdY+TcdxkdIdz8nFXWKwyUYdOyMTSDeIeH059bErMpZ8HHfEgC5frfFcWLwlBrts1DGMBJduEPF8SH08KzKO3mdCUWtQcTwXFl5iOB6l27bLRh3DSGDpBhHPh7TBrkh/IoRQWDLXnktGrCUGu1yjjmdGgko3iHg+pA2eFelLzxVtJdQez8nFWmKwyzXq2BkJKJ0g4vmQttgV6UOkTihMi/GcXNyPk7DBRh07I8GkE0R57kwsKStkEGmEXZH2ROuE5NTcnosmvMQQjR026tgZCSSdIOL5kPbYFWlHxE5ITsvxXFi8JQY7bNQxjASRThAtLSvEe12DUddCSR3coNOG6CEEaD+ek4u1xGCHjTqGkQBSDSKeD+mHXZG6zBBCYVptz0UTa4nBDht1DCODpRpEfP+QftgVqcdMIQToM56Ti7XEYIdr1DGMDJRqEPF8SF/sitJnthAC9B3PhcX9OAmLb9Rxm84gqQYR3z+kL27QpUfk7bhEtN6eiybex0lYfaOOnZEBUgking8Zg11RaszYCcnpPZ6Ti7XEYPWNOoaRzlIJIp4PGYNnRckzewgBxozn5GItMVh9o45hpKNUgojnQ8ZhV6ScFUIoTM/tuWhiLTFYfaOOZ0Y6SSWIeD5kHJ4VKWPmM6FojBzPhcW6EoPVr1HHMNJBskHkcACXzpuK+rY+vpHVIOyK4rNaCAHGj+fC4i0xnLTwuZGiMHr88cdxySWXoLq6euJ/Bw8e1Lo2S0g2iHh9OeOxK4rNiiEUZsT2XCwxlxgsvFGn6Mzo+PHjuOWWW/C1r31N63osJdkg4vmQGNgVXchKZ0LRiDCek4u1xGDljTpFndHx48excOFCrWuxFH+SQcTzITGwK5rMyp1QmCjjOblYSwxW3qhL2BkNDw+jpaUFu3btwq233oqCggJ87Wtfwz/+4z8qfhK/34+RkZGUCvT7/ZP+FJ3f70cgJOHG3x7FG6e8CW/vAFBzUREOWPC3TTMaFegFyUgZDmDx7Hz0+IKW7ITkls8R7+9f+/lheLIy4AtM7pDe6xrE8PCw7ht1arwOJ7pvwjDq6enB8uXL8YUvfAE/+clP0NDQgO3bt2PGjBlYv369oiKamprg9XoV3TaW5ubmtO6vl0BIwr37zuNoZyDhbXMyHSjNdwr3F8Gu5hVl4t1O687klchwAJVTXTg/EkJ9u3V/Cw8r8ThxpNVrdBkXkADMyHHAF/EyMhwcw8tvNaAkz5h35aTzOtzdHX9KlPDfqLy8HLt3757455qaGlx11VXYs2eP4jCqrKxEaWmpottG8vv9aG5uRkVFBdxud0qPoRd/MIQbf3tUURCVFWUDAJrPp9Yxkvqy3NkA7BlGTocDS8oK0DXgx7u99viZdDqA3Bw3Rn1DRpcS1YyifLT0eS/4uqNoNqounqFrLWq8Dre3t8f9fsIwamxsxL59+7Bt27ZJhWVnZysuwu12J3V7rR5DSyPBEL7+2wZFozl+/pB47Hq1BfliwhGbLc4Y/ebWRGJNjE+fDxj2WpjO63CiEEu4wJCbm4uHH34YL774IsbGxrB//378+c9/xtVXX51SQVakdGuO7x8Sl9026OywmBCPaNtz0cRaYrDqRl3CzmjevHl44IEH8OMf/xi33347Zs6cibvvvhtVVVV61Cc8pUHE68uJy05dkdVXtJUQcXsumlgfJ2HVjTpFp2C1tbWora3VuhbTURpEfP+Q2OzQFTGEPiL6eC4sfCWG4xFvNbDqNep4OaAUKQ0ivn9IbFZ/X5Hdx3GRzDCek4t2JQarXqOOV+1OgZIgcgBYNc8cv4HZmVW7InZCFzLLeE4u5sdJWPBTX9kZJUlJEOVkOrB4dj6DSHBW7IrYCcUm0rXnlIq5xGDBa9SxM0qCkiAqK8pGIBBAg00OxM3MSl0RO6H4zDaeC4u1xGDFjTp2RgopCaKlZYU4PxRA15CFXuUsyipdETuhxMw4nguL9XESVtyoY2ekQKIgcjiAVSbZ0KFxZu+K2AkpZ5btuViiLTFYcaOOYZRAoiDi+4fMx8zvK2IIJces4zm5aEsM4Y06Ky0xMIziSBREfP+QOZmxK2IIJc/M4zm5mB8nYbGNOp4ZxZAoiPj+IXMy21kRz4RSZ8btuWjCSwyRrLZRxzCKIl4Q8fpy5maWroghlB4rjOfCYi0xWG2jjmO6CPGCiOdD5maGsyKO49JnlfGcXLQlBqtt1DGMZOIFEc+HzE/kroghpB6zb89FE22JwWobdRzTfSheEPF8yPxEPSviOE5dVhrPyUVbYrDaNeoYRogdRDwfsg7RuiKGkPqsOJ4Li7XEcNJC50a2D6NYQZTnzsSSskLLtft2JFJXxBDSzvI5RZbYnosm5hKDhTbqbH1mFCuIeD5kLSJ0RRmO8XFv92CAZ0IaKPE4cbTN2n9foy0xWGmjzrZhFCuIlpYV4r2uQY7lLMLoDTpnhgNLSgvQfm4AR/jLjSacDsCZAUuO5+SiLTFYaaPOlmO6aEHE8yFrMqorko/jjrT2ocsnQHtmUcvnFKF9wPp/Z6MtMYQ36qzAdmEULYh4PmRNRpwV8UxIX3On5Vp+PBcWbYnBSht1tgqjaEFUPiUHU3JdPB+yID27IoaQ/qy8PRdNzI+TsMi5kW3CKFoQ8f1D1qVXV8QQMo5Vrj2XjKhLDBbZqLPFAkNkEPHzh6xP666IV0wwllXf3JpItCUGq2zUWT6MIoOI15ezPi036BhCxrPbeE4u2hKDVTbqLB1GkUHE9w/ZgxZdEUNIHFa89pxS4SUG+cavVa5RZ9kzo8gg4vmQPah9VsQzIbHYdTwXFm2JwSobdZbsjORBxPMhe1GrK2InJB47j+fkon6chAU+9dVynZE8iPj+IXtRoytiJyQuO27PRRN1icECG3WW6ozkQcTzIftJpytiJyQ2u4/n5KItMVhho84yYSQPIl5fzn5S3aBjCImP47nJoi0xWGGjzhJjunAQvd7UzevL2VSyXRHHcebB8dxk0ZYYrHCNOtOHUTiIDp8+z/Mhm0rmrIghZC4cz0UXucRghY06U4/pwkF0qnuQ15ezMSVdEcdx5sPxXGxRP07C5Bt1pu2MwkHUNxTg+4dsLFFXxE7IvDieiy3qEoPJN+pM2RmNBEO44TeH4A+GUG+Ty8dTdLG6InZC5sbxXHzRlhjMvlGnuDPq6enBmjVrsHfvXi3ruYDD14I8Xx0cvhYA40H0z787Au9wgOdDNlXm6sBaz1FsmD1wQVfETsj8rD6eK3N1YGnWEZS5OlJ+jGhLDGbfqFPcGd1xxx3wer0alhKh42Wg8QfI6j2Ai0f7IXUWIjRlBX7Rcy2On/04x3I2tNpTj5uLn8Li3CYUOocwOObBUXcFHuq6BgeHl7ITsgirXnsu8ue3b0ou3h6qxENd16DOtyTpx4tcYjD7NeoUhdHvfvc75OTkYNasWVrXM67jZWD/PwHDbQj/Z3UE++DsehmfDTbg9cAtaMVSfWohIaz21OP+8vsxO6t34mt5GT6sy6/HAs8Z/Fv3bXju9AIDKyQ1WHU8F+3nt9A5hHX59fiYuw07W3fiTV9yr2mRSwzhjTqzLjEkHNO1tLTgiSeewF133aVDOR9q/AEw3Bb1W7NcPdhR/LR+tZAQbi5+atJfZLnpGd34fO5unSsitVl5PBfv53d2Vm9Kr2lRP07CxOdGcTuj0dFR3HrrrbjjjjtQVFSU8pP4/X6MjIwouq3DdwpZvQcQr9Fc7mnClXOH0CXNTrkmrYyNjWF4ZBg52TnIyDDHsqLoNRc72rHc0xz3NktyT6LM1YG2YIlOVZHals8pwgELjljLszqwJPdk3Nuk8vPbfn4YnqwM+AIfdUjHz5zHuo8VplxrLH6/f9Kf6TxGLHHD6JFHHsHChQuxfv36lAsAgKamJsXnTXm+Olw82h/3Np4MH851N+GAT+R2NGh0ASkQs+a1nibkFvji3qbQOYTyrE6GkUmVeJw40uo1ugxNlLs6UOCMf8adys+vBGBGjgO+wEdfO9jUjrVT4v9dSUdzc/xfCuPp7u6O+/24YfT888+ju7sbzz//PABgcHAQO3fuxI033oht27YpLqKyshKlpaWKbuvw5ULqKIAjTiD1hXLRGpip+PnJvDIAFEyrxEAoF/nOoZi3G+DPhGk5HUBujhujvtj//5qZN6MUQ2Me5GbEDolUX9NmFOWjpc878c/dAReqqqpSKTMuv9+P5uZmVFRUwO12p/QY7e3tcb8fN4xefPHFSf9cW1uLO++8Exs3bkyqCLfbjezsbGU3zl4ITFsJdO6JeZOGofn8DdjiMhxAdXkRugb8ePED4EvzKrEuvz7m7euH5mN26UL4e4fQHWWWTuKy6vZcUY4LF5fk41i7E4d9FXF/flN9TYs8XjvVMwS3263ZRl1Sr+VR7huPeAcEAHDJHUBOWdRvjeWU4SV8VeeCSC8ZDmDFnCKUFuXg0AfeiRX+h7quwZnAtKj3OROYhoe6tuCtlvPwDgWwau4UzMhP7bc30pcVt+eKcly4dN5UBENjqDt1Dr5AKOHP78NdW1J6rsglBjNfoy6pMHr55ZeT7opSMnMjsObXQMkmSJkFADD+Z8kmZKzdhW99+UbUXDRF+zpIN7FCKKzOtwQ7W3fi9YFlGBzzABgfbbw+sAy3tH5j4n0awZDEUDIJq23PRQuhMPnPb19o/Ky7P5SL/b7qST+/yQpfiUHOrBt14l4OqKQWKKlFoPcEWhpfwdyqDXBPG38fiQfAr7+6Cv/0y7dw8LS1fquyG/k47tAH3ri3fdO3FG+eWora0kEMe99Da2BmzNFGOJRcTgdWzZ2CUxzfCccq47mPxnF9cf99wj+/Za4OlGd1ojUwEyWzF+KgL/XXsPCVGI7LrkTS1DWITYvMd34q5phORvLMxaBnJSTP3Elf97gz8euvrmKHZFKJOqF4OsdmYb9vqaIZOzslMVlhPBevE4qnLVgy8fPrH03j44k/FHklBrNeo074MIqHgWQ+6YRQOhhK4jD7eC7VEIrmREc/CrLTG1BFXonBrNeoM3UYAQwkszAqhCIxlIxn1o+GUDOEwoIhCfNn5qf1GJFLDGb91FfThxHAQBKZKCEUiaFkDDOO57QIIbl0R3WRSwxm3aizRBgBDCTRiBpCkRhK+jHbeE7rEApLd1QX9eMkTHhuZJkwAhhIIjBLCEViKGnPLOM5vUIoTI1R3QVLDCb81FdLhRHAQDKKWUMoEkNJG2YYz+kdQnLpjuoilxjMuFFnuTACGEh6skoIRWIoqUf08ZyRIRSW7qguconBjBt1lgwjgIGkNauGUCSGUvpEHc+JEEJh6Y7qIpcYzLhRZ9kwAhhIWrBLCEViKKVGxPGcSCEkl86oLnKJwYwbdZYOI4CBpBa7hlAkhpJyoo3nRA2hsHRHdZFLDGbbqLN8GAEMpHQwhKJjKCUmynhO9BAKS3dUd8ESg8k26mwRRgADKVkMIWUYStGJMJ4zSwjJpTOqi1xiMNtGnW3CCGAgKcEQSg1D6SNGj+fMGEJh6YzqIpcYzLZRZ6swAhhIsTgAVJcVMoTSxFAybjxXmJNp2hAKS2dUF7nEYLaNOtuFEcBAkstwjIfQDI8TR9r6GEIqkYfSijlFKMq2x181I8ZzhTmZWDTdheCoeUNILp1RnXyJwWwbdfb4GxKF3QNJPo470taHLp+5/wKLKhiScOgDLwb9Y1gxp8jSnZLe47mJcdzoGN7pCWIomP5nA4kgnVHdBR8nYaJzI9uGEWDPQOKZkDFGJeDQB15Lj+/0Gs9FnglZJYTC0hnVXbDEYKKNOluHEWCfQGIIicGqZ0p6jOfMvJiQrFRHdZFLDGbaqLN9GAHWDiSGkJisFEpaj+fsFEJhqY7qIpcYzLRRxzD6kNUCiSFkDlYIJa3Gc3YMobB0RnXyJQYzbdQxjGSsEEgMIXMyayhpMZ6zcwjJpTqqky8xmGmjjmEUwayBxBCyBjOFktrjOYbQZKmO6i74OAmTnBsxjKIwUyAxhKzJDKGk1niOIRRdqqO6C5YYTLJRxzCKQfRAYgjZg6ihpMZ4jiGUWCqjusglBrNs1DGM4hAxkBhC9iRSKKU7nmMIKZfqqE6+xGCWjTqGUQKiBBJDiAAxQinV8RxDKHmpjurkSwxm2ahjGClgZCAxhCgao0IplfEcQyg9qYzq5EsMZtmoYxgppHcgMYRICT1DKdnxHENIHamM6i74OAkTnBsxjJKgRyAxhCgVeoSS0vEcQ0hdqYzqLlhiMMFGHcMoSVoFEkOI1KBVKCkZzzGEtJPKqE6+xGCGjTqGUQrUDCSGEGlBzVBKNJ5jCGkvlVGdfInBDBt1DKMUpRtIDCHSgxqhFGs8xxDSTyqjOvkSgxk26hSF0fPPP48rrrgC1dXVuPLKK/HSSy9pXZcpRAukMlcH1nqOoszVEfU+DCEyQjKhJP8ZjjaeYwgZI9lRnXyJwQwbdQn7vlOnTuHb3/42fvnLX2L58uV44403sG3bNrz22muYOnWqHjUKLRxIP/z1I/g/0i+xOLcJhc4h9IVy8fZQJR7qugZ1viXjH+9dXoSuAT8OfeA1umyyqXAouZwOrJo7Bad6h9D94W/Qqz31uLn4qYmf4f5QLppGF+KHI59DnW8JinJcuLgkH8fa+1B36pzB/yb2Ex7V9Y+MKrp9eInheMf4iO5k5wDmTMtNcC/jJAyjefPmYd++ffB4PPD5fOjq6oLH40FWVpYe9ZmC5/xr+O6M+5Ax3DbxtULnENbl1+Nj7jb8NHAnXj6/mCFEwogMpam+ffjXafdjdlbvxG0KnENY4TyEB+ecxs8C/4rft1YyhAwUDElYWpaPg6eVv89r0hJD1yA2LZqpRWmqUDSm83g8aG1tRU1NDW6//XbccsstyMvL07o282j8waQgkpud1YtN0q84jiMhhUPp/8n/r0lBJFfi6sHGsV9yHCeAZEd18iUG0TfqFK9nzJo1Cw0NDTh48CBuuukmXHTRRVizZo2i+/r9foyMjKRUoN/vn/SnaBy+U8jqPQBHnNssyT2JMlcH2oIlutVlZaIfxJpNeVYHFuecjHsb/gyL4fjZfhS4nej3K/vFoLP/o9fdEx39hr4OJ7qv4jDKzBy/6Zo1a/CJT3wCe/bsURxGTU1N8Hq9Sp8qqubm5rTur5U8Xx0uHu2Pe5tC5xDKszr5F1klI/7U/kJRdOWuDhQ443fu/BkWw+iYhNl5GYrD6Ix3BDlOYDgEvNc1iGPHjsHhiPerc3zpvA53d3fH/X7CMHr11VfxxBNP4Fe/+tXE14LBIPLzla8ZVlZWorS0VPHt5fx+P5qbm1FRUQG3W4zL58s5fLmQOgrgiBNIvjEPWgPizmrNJtudDUD8d5SbhTejFENjHuRm+GLepi+Uy59hQWS6swEEFd1WAjBnugfvdvrgD0konP1xlE/NSfo51Xgdbm9vj/v9hGG0aNEiHDt2DM8++yw2b96M119/Ha+++iqeeuopxUW43W5kZ2crvr1Wj6GJ7IXAtJVA556YN/HMXoMfrr4KD+xpwls8AE5bOr/Z0Uc+2o5z4rCvAuvy62Pe9tTYInZFgni3czCprbqiXDeA8V80TnsDqJyd+pv103kdThRiCRcYZsyYgcceewy7du1CTU0NHnzwQfznf/4nPv7xj6dUkCVdcgeQUxb9ezllQNW3sbZiOp66YQ1+u/VSrJrHlXgyTrT3CT3UdQ3OBKZFvf2ZwDTc/cFnUT2nCFNyXVFvQ/pJ9g2wk5YYBL5GnaIzo5qaGvz3f/+31rWY18yNwJpfA+/cDannLThG+yFlFsAxfRVQ9e3x739obcV0rK2Yjjeae9gpka7ivU+ozrcEO1t3Ykfx01iSe3LivXINQ/PxcNcW1PmWAD4vinJdqJ5ThCN8m4Khktmqk1+JQeSNuuQ/QpCiK6kFSmoR6D2BlsZXMLdqA9zTFsS8OUOJ9KL0zapv+pbizVNLUebqQHlWJ1oDMy8YzXmHgjjygRfVc4rQ0uPD+SFlZxekrmTeABu+EsNgICT0Nep4bTqVSZ65GPSshOSZq+j2HN+RVlK9bE9bsAT7fUvjnhEd+cALCUD1nCJ1iqWkJDOqk3+chMjXqGMYCYKhRGrR69px8i6JZ0n6S2ZUF74Sg8jXqGMYCYahRKky6gKm7JKMkczHSkz6OAlBz40YRoJiKJFSIlxFm12S/pIZ1U1aYhB0o45hJDiGEsUiQghFYpekL6WjOvnHSYi6UccwMgmGEoWJGEJy7JL0o3RUJ19iEHWjjmFkMgwl+xI9hCKxS9JeMqO68BKDqBt1DCOTYijZh9lCSI5dkvaUjurCSwyibtQxjEyOoWRdZg6hSOyStKN0VCdfYhBxo45hZBEMJeuwUgjJsUvShtJR3aQlBgE36hhGFsNQMi+rhlAkdknqUzKqky8xiLhRxzCyKIaSedglhOTYJalL6aguvMQg4kYdw8jiGErismMIRWKXpA6lo7rwEoOIG3UMI5tgKImDITQZuyR1KBnVhZcYRNyoYxjZDEPJOIU5mQyhONglpUfJqE6+xCDaRh3DyKbkoVRzUZHR5VhaYU4mFk13ITjKEEqEXVLqlIzqJi0xCLZRxzCyubUV07H7Kytw1/opDCWVTYzjRsfwTk8QQ0Hll/y3O3ZJqVEyqgsvMYi2UccwIgDA4mI3dn9lBcd3Kog8E2IIpYZdUvKUjOrCSwyibdQxjGgSnimljosJ2mCXpJySUV14iUG0jTqGEUXFUFKOIaQ9dknKJRrVhZcYRNuoYxhRXAyl2BhC+mOXlFiiUd2kj5MQ6NyIYUSKMJQ+whAyFruk+JSM6iaWGATaqGMYUVLsHEoMIbGEu6RlZQVGlyKcRKO68BKDSBt1DCNKiZ1CiSEkLu9QEEfb+jF/qgtTchNfm80uEo3qwksMIm3UMYwoLVYOJYaQeZw8F4Qk8SwpLNGoLrzEINJGHcOIVGGlUGIImZN3eHT8LKm8CFN5lhR3VBdeYhBpo45hRKoycygxhKzhSKsXY2CXlGhUN/FxEoKcGzGMSBNmCiWGkPVMbNzZuEtKNKqbWGIQZKOOYUSaEjmUGELWZ/cuKd6oLrzEIMpGHcOIdCFSKDGE7MXOXVK8UV14iUGUjTqGEenKyFBiCNmbHbukeKO68BKDKBt1DCMyhJ6hxBCiMDt2SfFGdQU5LmE26hhGZCgtQ4khRLHYqUuKN6qb+DgJAc6NGEYkhGRCaWbGWaz1HEWZqyPq9xlCpIRduqR4o7qJJQYBNuoUXT/j4MGDuPfee/H+++9jypQp2Lp1K6699lqtayMbWlsxHWsrpuON5h48sKcJb506N/G91Z563Fz8FJZ5mpE3zYe+UC7eHqrEQ13XoM63BEU5Llxcko9j7X2ok92PKJ4jrV4U5bpQPacIRz7wGl2OJmKN6sJLDCJs1CUMo76+Ptx00034zne+g0996lM4fvw4vvKVr2DOnDlYu3atHjWSDUWGUkbXXtxffj9mZ/VO3KbQOYR1+fWoyG7HzwL/it+3VjKEKCXyLul0rw/nhoJGl6Sq8Kiuf2R00tfDSwwibNQlHNOdOXMG69evx+bNm5GRkYGqqipceumlOHz4sB71kc2Fx3ePVf/fSUEkV+LqwcaxX3IcR2mz6llSvFFdQY5LiI26hJ3RwoULcd999038c19fHw4ePIirrrpK8ZP4/X6MjIykVKDf75/0p+jMVi8gfs0O3ykUDh2Ne5sluSdR5upAW7BEn6LIssJd0tKyAnxwbgjnh0YT38kERoLR/z0CoyEMB0NoPutF+dScqLdR4zUi0X2Tuub6wMAAtm/fjqqqKtTW1iq+X1NTE7xebzJPdYHm5ua07q83s9ULiFtznq8OF4/2x71NoXMI5e5OhhGppr6tH3lZDsyf6sLJc+Yf2x0/OwBPJuCLyKT23vHlhT2H3sHK2dlxHyOd14ju7u6431ccRq2trdi+fTvKy8vxwAMPICND+SJeZWUlSktLFd9ezu/3o7m5GRUVFXC73Sk9hp7MVi8gfs0OXy6kjgI44gSSlFmAn/6/V+Gd/uk4dqYfjWcH0HhmAO91+xAS4A19ZE6DAQknzwUt0SWFJODiWYU43No36evdQyF4sjIQzJmGqqq5Ue+rxmtEe3t73O8rCqPGxkZs3boVmzdvxm233ZZUEAGA2+1Gdnb8xNXjMfRktnoBgWvOXghMWwl07ol5E8f0VSiYWYXVM4HVlTMnvj4SDOGds/14u60Pb7f34Vh7H5q6BhEaY0CRcvVt/ZbYuAtGWaqTAMyZ6sGp3pGEf//TeY1IFGIJw6inpwdbt27FV77yFWzbti2lIojSdskdQP+7wHDbhd/LKQOqvh31btkuJ5bPmYLlc6ZMfI0BRamwwsZdrK26ghyX4Rt1CcPomWeewblz5/Doo4/i0Ucfnfj69ddfj1tuuUXT4ogmzNwIrPk18M7dkHregmO0H1JmARzTV40H0cyNih+KAUXpMPP7koIhCUvL8nHw9PmIr49NbNQ5HA5DaksYRtu3b8f27dv1qIUovpJaoKQWgd4TaGl8BXOrNsA9bYEqD82AomSYuUuK9gbYrgH/xDXq5kzLNaCqJLfpiEQgeeZi0LMSkmeups/DgKJEzNglRRvVTXycROcAw4jIDBhQFMlsXVK0UV34SgxNXYPYtGhmnHtrh2FElKZ4AXWsvQ9HTp/DoVPdaO8Pcc3cwszUJUUb1RXkuAy9Rh3DiEgD8oDaUl2CxsZGfHz+Arx/PoBj7X1oaGMHZUVm6ZKijeqCoTFDN+oYRkQ6SdRBMaCsQ/QuKdqormvAj97BgGEbdQwjIgMxoKxL9C4pclTX7h2Gx+U0bKOOYUQkGAaUtYjaJUWO6iY+TsKgjTqGEZEJMKDMTd4ltfQOCnGNu2ijuoIcl2EbdQwjIpNiQJnPkVYvinIyhbkSeOSoLhgaM2yjjmFEZCEMKPF5h0fhHQaWlhWg9dywoWdJkaO6rgE/AqHoH1GuNYYRkcUxoMQkwpXAI0d17d5hDAdDhmzUMYyIbCheQB1p6cG+d1rRNuTEez0+BpSGRNi4k4/qJAkoznMbslHHMCIiAB8F1KLiHCzz9KOqqgpwuiY6qPDljthBqc/IjbvIUV1BjsuQjTqGERHFlGjEx4BSj1FdUuSoLhgaM2SjjmFERElhQGnLiC5JPqrrGvAbslHHMCKitDGg1KV3lyQf1bV7h9F6fkjT54uGYUREmmBApU+vLkk+qpOk8VGd3ht1DCMi0g0DKnl6dUnyUZ07U/9r1DGMiMhQDChltO6S5KO6YGhM9406hhERCYcBFZ2WXZJ8VNc14Nd9o45hRESmECugjrb04KXD7+KclId3OgbR3DWIUYsHlFZdUnhU1+4dxulen2qPqwTDiIhMK9vlxLLyQrj6PaiqWoTs7OyoHZQVA0qLLkk+qusf1vdqEAwjIrIUpSM+qwSUml2SfFTXPxLUdaOOYURElmf1gFKzSwqP6oYCIV036hhGRGRLVgwoNbqk8Kiua8Cv60Ydw4iI6ENWCKh0u6TwqO7QB+dxSsclBoYREVEcZg2odLok/+gYJAnoGfBrU1wUDCMioiSZJaBS7ZLCo7qO/hGNK/wIw4iISAUiB1SyXVJ4VHfWOwxJ0qdWhhERkUaiBZR3wIcX9jdgKHs6TnQO6RZQyXZJ/tExnB8KoPXcMIo9GZrWBjCMiIh0le1yYv60LFRVlSM7OxuAvh2U0i7pREc/clxOvNc9gGJPoep1RGIYEREZTO8Rn5IuKTyqazs/DMxlGBER2ZIeAZWoS/KPjuF0rz4ftMcwIiIyCS0CKl6XdKKjH2VFOXD4WpDnq4PD5wGyF6j+7wUkGUYNDQ246aab8Le//U2TYoiIKDlqBVS0LmlF9lHcjP9B1p6TuHi0H1JnITC1BrjkDmDmRlX/PRSFkSRJ+MMf/oB77rkHTqdT1QKIiEhdqQaUvEua4fsb7iq+H7OdvcDo+PcdwT6gcw/Q/y6w5tdASa1qNSsKo8ceewwvvPACtm/fjp///OeqPTkREekjmYA60urFkxVPYnZWb/QHG24D3rlb/zD63Oc+h+3bt+Ott95K6Un8fj9GRlJ7J6/f75/0p+jMVi9gvppZr7ZYr7ZEq3dRcQ4WFedgS3UJgPGAOtXSiEXHmoE4x05Sz1sI9J6A5Jmr6HkS/fsqCqPi4mJFTxZLU1MTvF5vWo/R3Nyc1v31ZrZ6AfPVzHq1xXq1JXK9eb6DcEuDcW/jGO1HS+MrGPSsVPSY3d3dcb+vyzZdZWUlSktLU7qv3+9Hc3MzKioq4Ha7Va5MfWarFzBfzaxXW6xXW2ao1+HLhdRRAMdof8zbSJkFmFu1QXFn1N7eHvf7uoSR2+2eeKexkY+hJ7PVC5ivZtarLdarLaHrzV4ITFs5vqwQg2P6KrinKV/zThS82l9wiIiIzOeSO4CcsujfyykDqr6t6tMxjIiI6EIzN364vr0JUmYBgPHRHEo2AWt3GfM+o7BLL70UdXV1qhZARESCKqkFSmoR6D2BlsZXMLdqQ1KjuWSwMyIiorgkz1wMelYqXlZIBcOIiIgMxzAiIiLDMYyIiMhwDCMiIjIcw4iIiAzHMCIiIsMxjIiIyHAMIyIiMhzDiIiIDMcwIiIiw2n6ERKhUAgA0NHRkfJj+P1+dHd3o729XdjP/pAzW72A+WpmvdpivdoyW72AOjWHcyCcC5E0DaPwJ/tdd911Wj4NERGZRHd3Ny666KILvu6QJCnOp5ynZ2RkBMeOHcOMGTPgdDq1ehoiIhJcKBRCd3c3LrnkkqgfKqhpGBERESnBBQYiIjIcw4iIiAzHMCIiIsMxjIiIyHAMIyIiMhzDiIiIDGeKMGpoaMC6deuMLiOhgwcP4vOf/zxWrFiBTZs24cknnzS6pLief/55XHHFFaiursaVV16Jl156yeiSFOnp6cGaNWuwd+9eo0tJ6PHHH8cll1yC6urqif8dPHjQ6LJi6ujowA033IDly5fj7//+77Fr1y6jS4rpueeem/Tftbq6GgsWLMCdd95pdGkxHT58GJ/97GexfPlyXH755fjTn/5kdElx7d+/H5/5zGdQXV2Na665BvX19do9mSSwsbEx6emnn5ZWrFghrVq1yuhy4vJ6vdLKlSulP/7xj1IoFJKOHTsmrVy5Utq3b5/RpUX1/vvvS0uXLpUOHTokSZIk7du3T6qqqpJ6e3sNriyxbdu2SQsWLJBefvllo0tJaOfOndLjjz9udBmKjI2NSVdffbV0zz33SIFAQDp58qS0cuXKiZ8R0b3xxhvSZZddJp09e9boUqIaHR2VVq9eLb3wwguSJEnSgQMHpEWLFkmtra0GVxZda2urtHTpUun3v/+9FAwGpb1790qrVq2Surq6NHk+oTujxx57DLt27cL27duNLiWhM2fOYP369di8eTMyMjJQVVWFSy+9FIcPHza6tKjmzZuHffv2Yfny5fD5fOjq6oLH40FWVpbRpcX1u9/9Djk5OZg1a5bRpShy/PhxLFy40OgyFKmvr0dXVxe++c1vwuVyobKyEk8++STmzZtndGkJ+Xw+3HbbbbjrrrtQUlJidDlR9ff349y5cwiFQpAkCQ6HAy6XS9ir07z22muYP38+tmzZgszMTGzYsAFLlizBiy++qMnzCR1Gn/vc5/DHP/4RixcvNrqUhBYuXIj77rtv4p/7+vpw8OBBLFiwwMCq4vN4PGhtbUVNTQ1uv/123HLLLcjLyzO6rJhaWlrwxBNP4K677jK6FEWGh4fR0tKCXbt24bLLLsMVV1yBZ555xuiyYmpsbERlZSXuu+8+XHbZZbj88stRX1+PKVOmGF1aQo8//jjmz5+PTZs2GV1KTFOmTMEXv/hF7Ny5E1VVVbjuuutw5513CvuL1djY2AWX7cnIyMDp06c1eT6hw6i4uBgOh8PoMpI2MDCA7du3o6qqCrW1tUaXE9esWbPQ0NCAJ554Avfeey/2799vdElRjY6O4tZbb8Udd9yBoqIio8tRpKenB8uXL8cXvvAF7N27F9/73vdwzz334NVXXzW6tKj6+vpQV1eHKVOmYO/evbj77rvxve99T+gzLmC8K9q9ezduvvlmo0uJK/zi/uCDD+Lo0aN47LHH8IMf/AAnTpwwurSo1q1bh4aGBrzwwgsIBoN47bXX8Oabb8Lv92vyfEKHkRm1trbi2muvRWFhIR5++GFkZIj9nzgzMxMulwtr1qzBJz7xCezZs8fokqJ65JFHsHDhQqxfv97oUhQrLy/H7t27sX79emRlZaGmpgZXXXWVsP+Ns7KyUFhYiBtuuAFZWVkTh+yi1hv20ksvYfbs2Vi2bJnRpcT1l7/8BQ0NDfjkJz+JrKwsbNiwARs2bMCzzz5rdGlRzZ07Fw888AAeffRRrFu3Dv/7v/+LT3/608jPz9fk+cR+pTSZxsZGbNmyBevWrcMjjzwS9cq0onj11Vfx5S9/edLXgsGgZj9o6Xr++efx5z//GTU1NaipqcGZM2ewc+dO/OxnPzO6tJgaGxsvqM/v9wt7Ljdv3jwMDw9jdHR04mvh8w2R7d27F1dccYXRZSR09uxZBAKBSV/LzMxEZqamn+STssHBQcyaNQvPPfcc6urq8MMf/hAnT57EokWLtHlCTdYiVPbmm28Kv03X3d0trV69WvrpT39qdCmKdHV1SStWrJD+53/+RwqFQtIrr7wiLV++XGpubja6NEU2btwo/Dbd+++/Ly1evFh64YUXpFAoJL3xxhvSsmXLpGPHjhldWlTDw8PS3/3d30n33HOPFAwGpUOHDknLli2Tjhw5YnRpcW3YsEHav3+/0WUkdOLECamqqkp65plnpLGxMamurk6qrq6WGhoajC4tqtbW1omfV7/fL+3evVu67LLLJJ/Pp8nzMYxU8uijj0rz58+Xli1bNul/999/v9GlxXTgwAHp6quvlqqrq6Wrr77aFH+hw8wQRpIkSXv27JE+9alPSUuXLpU+8YlPTKz1iqqlpUX66le/Kq1cuVLauHGj9MwzzxhdUlyjo6PSggULTPNL1J49e6TNmzdL1dXV0pVXXin95S9/MbqkuJ599llp48aNUnV1tfSlL31JOnnypGbPxc8zIiIiw/HMiIiIDMcwIiIiwzGMiIjIcAwjIiIyHMOIiIgMxzAiIiLDMYyIiMhwDCMiIjIcw4iIiAz3/wOKr4R/SbfiGgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1,1)\n", "\n", "gdf.plot(ax=ax, aspect='equal')\n", "gdf_points.plot(ax=ax, aspect='equal', color='orange')\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "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.8.5" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }