{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 01 Extract XY Coordinates\n", "\n", "Vector data is commonly provided as ``shape`` files. These files can be loaded with ``GeoPandas`` as ``GeoDataFrames``. Each geometry object is stored as ``shapely`` object within the ``GeoSeries`` ``geometry`` of the ``GeoDataFrames``. The basic ``shapely`` objects, also called Base Geometries, used here are:\n", "\n", "* Points/Multi-Points\n", "* Lines/Multi-Lines\n", "* Polygons/Multi-Polygons\n", "* Geometry Collections\n", "\n", "The first step is to load the data using ``GeoPandas``. We can inspect the different columns of the GeoDataFrame by looking at its head. In the following examples for point, line and polygon data, we have an ``id`` column which was created during the digitalizing of the data in QGIS, a formation column containing the name of a geological unit (this becomes important later for the actual modeling) and most importantly the geometry column consisting of the ``shapely`` geometry objects. The X and Y coordinates of the different geometry objects can then be extracted using ``extract_xy()`` of the GemGIS vector module.\n", "\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-17T10:51:49.074789Z", "start_time": "2021-03-17T10:51:46.959613Z" } }, "outputs": [], "source": [ "import gemgis as gg\n", "\n", "file_path ='data/01_extract_xy/'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-17T10:51:49.692087Z", "start_time": "2021-03-17T10:51:49.659546Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Downloading file '01_extract_xy.zip' from 'https://rwth-aachen.sciebo.de/s/AfXRsZywYDbUF34/download?path=%2F01_extract_xy.zip' to 'C:\\Users\\ale93371\\Documents\\gemgis\\docs\\getting_started\\tutorial\\data\\01_extract_xy'.\n" ] } ], "source": [ "gg.download_gemgis_data.download_tutorial_data(filename=\"01_extract_xy.zip\", dirpath=file_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Point Data\n", "\n", "The point data stored as shape file will be loaded as GeoDataFrame. It contains an ``id``, ``formation`` and the ``geometry`` column." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-01-25T20:47:10.434417Z", "start_time": "2021-01-25T20:47:05.439082Z" } }, "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", "
idformationgeometry
0NoneTonPOINT (19.15013 293.31349)
1NoneTonPOINT (61.93437 381.45933)
2NoneTonPOINT (109.35786 480.94557)
3NoneTonPOINT (157.81230 615.99943)
4NoneTonPOINT (191.31803 719.09398)
\n", "
" ], "text/plain": [ " id formation geometry\n", "0 None Ton POINT (19.15013 293.31349)\n", "1 None Ton POINT (61.93437 381.45933)\n", "2 None Ton POINT (109.35786 480.94557)\n", "3 None Ton POINT (157.81230 615.99943)\n", "4 None Ton POINT (191.31803 719.09398)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "\n", "gdf = gpd.read_file(file_path + 'interfaces_points.shp')\n", "\n", "gdf.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inspecting the geometry column\n", "\n", "The elements of the geometry columns can be accessed by indexing the GeoDataFrame. It can be seen that the objects in the ``geometry`` column are Shapely objects." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:57.759564Z", "start_time": "2020-12-29T14:35:57.747115Z" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:57.775083Z", "start_time": "2020-12-29T14:35:57.761095Z" } }, "outputs": [ { "data": { "text/plain": [ "'POINT (19.150128045807676 293.313485355882)'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry.wkt" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:57.791086Z", "start_time": "2020-12-29T14:35:57.777084Z" } }, "outputs": [ { "data": { "text/plain": [ "shapely.geometry.point.Point" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(gdf.loc[0].geometry)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting the Coordinates\n", "\n", "The resulting GeoDataFrame has now an additional ``X`` and ``Y`` column containing the coordinates of the point objects. These can now be easily used for further processing. The geometry types of the shapely objects remained unchanged. The ``id`` column was dropped by default.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:57.823095Z", "start_time": "2020-12-29T14:35:57.795087Z" } }, "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", "
formationgeometryXY
0TonPOINT (19.15013 293.31349)19.15293.31
1TonPOINT (61.93437 381.45933)61.93381.46
2TonPOINT (109.35786 480.94557)109.36480.95
3TonPOINT (157.81230 615.99943)157.81616.00
4TonPOINT (191.31803 719.09398)191.32719.09
\n", "
" ], "text/plain": [ " formation geometry X Y\n", "0 Ton POINT (19.15013 293.31349) 19.15 293.31\n", "1 Ton POINT (61.93437 381.45933) 61.93 381.46\n", "2 Ton POINT (109.35786 480.94557) 109.36 480.95\n", "3 Ton POINT (157.81230 615.99943) 157.81 616.00\n", "4 Ton POINT (191.31803 719.09398) 191.32 719.09" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Data\n", "\n", "The figures below show the original point data and the extracted X and Y data using ``matplotlib``." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.110366Z", "start_time": "2020-12-29T14:35:57.826094Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAD7CAYAAACFSvW8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4yElEQVR4nO3df3hU1Z0/8PcQhwmJyZQkTSbRiClFEUOVRkXQCgoJUAK2dBctatG6LhVBI7goS7cEt+XX8wjsN251ZVmgphT/UKw8asjEH1gaLBigEkC0mqaiGVIg5ocJkyE53z/SGTLJzOTO5M79ce779Tx9au6cmdxP7vj23HvPOdcmhBAgIiIisogheu8AERERkZbY+SEiIiJLYeeHiIiILIWdHyIiIrIUdn6IiIjIUtj5ISIiIkth54eIiIgshZ0fIiIispRL9N6BeOnu7saXX36JlJQU2Gw2vXeHyJKEEGhtbUVOTg6GDDHHuRazg0hfWuSGtJ2fL7/8Erm5uXrvBhEB+Pzzz3H55ZfrvRuKMDuIjCGeuSFt5yclJQVAzx8vNTU1ZBufz4fKykoUFRXBbrdruXtxI2NNgJx1yVgTEFxXR0cHcnNzA/8+msFA2WGF4yZLXTLWBMhZl9a5IW3nx3+5OjU1NWLnJykpCampqVJ9gWSrCZCzLhlrAkLXZabbRwNlh5WOm9nJWBMgZ11a54Y5bsITERERqUTaKz8kt65ugQN159DYeh6ZKYm4KS8NCUPMc3WBiPTB7CCAnR8yoYraBqzafRwNzecD27KdiVg5awym52fruGdEZGTMDvLjbS8ylaoTp/Fw+aGg8AIAT/N5PFx+CBW1DTrtGREZWUVtA7ODAtj5IVNZ++ZHECG2+7et2n0cXd2hWhCRVXV1C6zafZzZQQHs/JCpeFrOh31NAGhoPo8Ddee02yEiMrya+qZ+V3x6Y3ZYDzs/kvGfubxxtAH7Pz1ryTOZxtbwIUdE/fkHAQPAgbpz0uXGmTavonbMDuvggGeJVNQ2YM3rx7BkNLDs5Q/h7bJZcjBfZkqi3rtAZBr+QcDn2jqw/ibgp9sPIu3SYVLlRsalDkXtmB3WwSs/kvAP5ut7W0i2wXyu1ESEm5RqQ8/MjZvy0rTcJSLTssog4IIRw5HtZHbQRez8SMBKg/memjEaAPqFmP/nlbPGcM0OIgWslBsJQ2xYOWsMAGYH9WDnRwIH6s5ZZjDf1Guy8Ny934XLGXx52uVMxHP3fleay/RE8Wal3ACA6fnZzA4K4JgfCSgdpCfLYL7p+dkoHOPiKq1Eg2C13ACYHXRR1Fd+3nvvPcyaNQs5OTmw2Wx49dVXg14XQqC0tBQ5OTkYNmwYJk+ejGPHjgW18Xq9WLx4MTIyMpCcnIzZs2fj1KlTQW2amppw3333wel0wul04r777sNXX30VdYFWoHSQnkyD+RKG2DBhZDruvP4yTBiZzvAyuD/+8Y/MDYOxYm4AzA7qEXXn5+uvv8Z1112HZ599NuTr69evx4YNG/Dss8/i4MGDcLlcKCwsRGtra6BNSUkJdu3ahZ07d2Lfvn1oa2tDcXExurq6Am3mzZuHI0eOoKKiAhUVFThy5Ajuu+++GEqU3015aRzMR4bW3t7O3DAY5gZZWdS3vWbMmIEZM2aEfE0IgU2bNmHFihWYM2cOAGD79u3IysrCjh07sGDBAjQ3N2PLli148cUXMXXqVABAeXk5cnNzUVVVhWnTpuHEiROoqKjA+++/j/HjxwMANm/ejAkTJuDkyZO4+uqrY61XSv7BfA+XH+JgPjKkwsJC/OhHPwr5GnNDH8wNsjJVx/zU1dXB4/GgqKgosM3hcGDSpEmorq7GggULUFNTA5/PF9QmJycH+fn5qK6uxrRp07B//344nc5AgAHAzTffDKfTierq6pAh5vV64fVeXMiqpaUFAODz+eDz+ULur397uNfNZMrVGfj1vOuwYc8JAO1wDOmZoeFKTcRTM0ZjytUZpq5TpmPlJ2NNQHBdSmrTMzeA6LNDpuPmz421b36EprYOAIBjiGBuGJyMdUWbG4OlaufH4/EAALKysoK2Z2Vlob6+PtBm6NChGD58eL82/vd7PB5kZmb2+/zMzMxAm77WrFmDVatW9dteWVmJpKSkiPvtdrsjvm4mi67q+f//vKH7H1u+RmddDd6o022XVCXTsfKTsSagp6729vYB2+mZG0Ds2SHTcVsy+uI/92QHc8MMZKxLaW4MVlxme9lswZdJhRD9tvXVt02o9pE+Z/ny5ViyZEng55aWFuTm5qKoqAipqakh3+Pz+eB2u1FYWAi73R5x/8xCxpoAOeuSsSYguK6Ojg7F79MjN4Dos8MKx02WumSsCZCzrlhzI1aqdn5cLheAnjOw7OyLayY0NjYGzupcLhc6OzvR1NQUdBbX2NiIiRMnBtqcPn263+f//e9/73d26OdwOOBw9F/C3G63D/jlUNLGbGSsCZCzLhlrAnrqunDhwoDt9MwNIPbskPm4yVaXjDUBctalNDcGS9VFDvPy8uByuYIuxXV2dmLv3r2BgCooKIDdbg9q09DQgNra2kCbCRMmoLm5GQcOHAi0+dOf/oTm5uZAGyKSA3ODiLQW9ZWftrY2/OUvfwn8XFdXhyNHjiAtLQ1XXHEFSkpKsHr1aowaNQqjRo3C6tWrkZSUhHnz5gEAnE4nHnzwQSxduhTp6elIS0vDE088gbFjxwZmcVxzzTWYPn06HnroIfzP//wPAOBf//VfUVxczBkbRCbU1taGzz77LPAzc4OI9BR15+eDDz7A7bffHvjZf698/vz52LZtG5YtW4aOjg4sXLgQTU1NGD9+PCorK5GSkhJ4z8aNG3HJJZdg7ty56OjowJQpU7Bt2zYkJCQE2vz2t7/Fo48+GpjdMXv27LBrhJB2uroFV0elqB0+fBjFxcWBn5kb1sPsICOJuvMzefJkCBH+QXc2mw2lpaUoLS0N2yYxMRFlZWUoKysL2yYtLQ3l5eXR7p4l6BUiFbUNWLX7eNDzgLKdiVg5a0zQc3EYctTX9773PeaGARg5O5gbpCU+28tklHZA4vF7Hy4/1O8J0J7m83i4/FDgwYB67R8RRWbk7ADA3CBN8anuJuIPkb5PYvaHSEVtQ1x+b1e3wKrdx/uFF4DAtlW7j+OND/XZPyKKzMjZ8dQrR5kbpDl2fkxCaQekqzv8rYVYHag71y+Y+v7+hubz+Pnva3XZPyIKz+jZ8VW7j7lBmmPnxySUdkBq6ptU/92NreF/b2/nvu4M+5p//w7UnVNpr4hICTNkRzjMDYoXjvkxCaUhcqbNO3CjMMINOMxMSYz5M/sabBgSUXTinR2RBiqrlR3MDVIbOz8moTREMi514EwMnx9pMGThGBeynYnwNJ8PeXnaBmB4sh3nvh74YXRqdqSIaGDxzI6BBlHflJcWMTuUYm6Q2njbyyT8IRJu4qcNPaFTMGJ4mBbhDTQY0n3cg5WzxgR+T9/fCwC/vDNf0f7dlJcW2NbVLbD/07P4/ZEvsP/Ts7yvTxQH8coOJYOoE4bYBsyObyTZo8oNgNlBg8crPybhD5GHyw/BBgSdRfmDY+WsMVGvizHQYEgbegYc7nvyDjx373f7neW5ep3lDRliU7x/RpkSz7VFSHbxyA6luVE4xoXp+dkRswNAVPtmhOxgbpgfOz8mMlCITM/Phs838K2n3pQOhjxQdw7T87NROMYV9l96JfsHKF8zKN6MEKJEWlA7O6LJjQkj0wfMDiW5ARgjO5gbcmDnx2QGCpFoKR1I6G+XMMSGCSPTY96/aM4Y43kmZYQQJdKSmtkRbW4AkbNDyb4ZITuYG/Jg58eEBuqAREPpQMJoBhxG2r9ozxjjwQghSqQHtbJD69wA9M8O5oZcOODZ4pQOhuw74DBWsZwxqi2aECWi/rTODUD/7GBuyIWdH4tTMhsjloHU4cTjjDFaeocokdlpnRuA/tnB3JALOz8UGAzpcgaHhsuZqPo9bD3OGPvSO0SJZKBlbgD6ZwdzQy4c80MA1B9IHU68puxHY6CF12zoCfB4dsCIZKBVbgD6ZwdzQy688iO5aBYD8w84vPP6yzBhZHrcQkTrM8a+9LhkT2Q2SrNDq9wA9M0O5oZceOVHYkZej0LLM8Zwv1/p2iJEVsPsCP+7mRtyYOdHUlUnTmPhjj8bej0KNafsx0LvDhiRETE7ImNuyIGdH0mtffMjrkehgN4dMCKjYXYMjLlhfhzzIylPC9ejIKLoMTvICtj5sTCuR0FEsWB2kNnxtpeFmXE9iq5ugQ8+Pct77UQ6Mlt2MDeoL3Z+JOVKTcTfmrzSrUcxbdN7qG/yBn42ygwUIlnImB3MDeqLt70k9dSM0QDkWY+i6sRpAP3HI/hnoFTUNuixW0TSkSk7mBsUDjs/kpp6TZauCwmqqatbYO2bH4V8zX92umr38YgLOBKRMrJkB3ODIuFtL4nJsh7FgbpzimegcPop0eDJkB3MDYqEnR/JybAeBZ+mTKQ9s2cHc4Mi4W0vMjw+TZmIosXcoEjY+SHDuykvDa7U8AFlQ8/sDbPNQCGi+GFuUCTs/JDhJQyxSTUDhYjij7lBkbDzQ6Yw9ZosAEBWqrlnoBCRdpgbFI7qnZ8LFy7g5z//OfLy8jBs2DB861vfwtNPP43u7u5AGyEESktLkZOTg2HDhmHy5Mk4duxY0Od4vV4sXrwYGRkZSE5OxuzZs3Hq1Cm1d9e0uroF9n96Fr8/8gX2f3rWMtM195Tcht89dDP+6+7r8buHbsa+J+9ggGkknt855oY2mBvMDT0Y8Xun+myvdevW4fnnn8f27dtx7bXX4oMPPsADDzwAp9OJxx57DACwfv16bNiwAdu2bcNVV12FX/7ylygsLMTJkyeRkpICACgpKcHu3buxc+dOpKenY+nSpSguLkZNTQ0SEhLU3m1TqahtwKrdx9HQfHGWgn/F0ilXZ+i4Z/Fn9hkoZhXpO6fGf0SYG/EX72NoZMwN/Rj1e6f6lZ/9+/fjzjvvxMyZM3HllVfin/7pn1BUVIQPPvgAQM/Z26ZNm7BixQrMmTMH+fn52L59O9rb27Fjxw4AQHNzM7Zs2YJnnnkGU6dOxbhx41BeXo6jR4+iqqpK7V02lYraBjxcfijoiwRcXLHUv6IpkVoG+s6psUoucyO+tDiGRH0Z+Xuneufn1ltvxVtvvYWPP/4YAPDnP/8Z+/btw/e//30AQF1dHTweD4qKigLvcTgcmDRpEqqrqwEANTU18Pl8QW1ycnKQn58faGNFXd0Cq3YfD/nMHf+2cCuaEsVCyXdOjVVymRvxo9UxJOrN6N871W97Pfnkk2hubsbo0aORkJCArq4u/OpXv8KPf/xjAIDH4wEAZGVlBb0vKysL9fX1gTZDhw7F8OHD+7Xxv78vr9cLr/fig+taWloAAD6fDz6fL+R7/NvDvW40B+rO4VxbBxwRrt43tXUAME9NShnxWHV1C9TUN+FMmxcZlzpQMGJ4VDNHjFhTX0q+c+faOvD+XxoDU4Z716W0Nr1yA4g+O8xw3HpTegwPfvZ3AOapSwkjHqvB5gZgzLr6ijY7YsmNwVC98/PSSy+hvLwcO3bswLXXXosjR46gpKQEOTk5mD9/fqCdzRZ8sIUQ/bb1FanNmjVrsGrVqn7bKysrkZSUFPFz3W53xNeNZP1NytqZqaZoGLWuMwD2nIjtvUatyU/Jd+7MiffxRp/63W432tvbFf0OvXIDiD07jH7celNyDM993HOL0Ux1KWXUmgaTG4Bx6/KLJTuiyY3BUL3z82//9m946qmncPfddwMAxo4di/r6eqxZswbz58+Hy+UC0HOWlp19cbBTY2Nj4KzO5XKhs7MTTU1NQWdxjY2NmDhxYsjfu3z5cixZsiTwc0tLC3Jzc1FUVITU1NSQ7/H5fHC73SgsLITdbh9c4Ro4UHcOP91+MGIbxxCB/7yh2zQ1KWWkY1V14jQef+lIv8u5/v+8brzr+sAU20iMVFM4Sr5zAPB/828MuvLjr6ujo0PR79ErN4Dos8MMx603pcfwf+8dh3Mff2CaupQw0rFSKzcAY9UVTrTZEUtuDIbqnZ/29nYMGRI8lCghISEwZTUvLw8ulwtutxvjxo0DAHR2dmLv3r1Yt24dAKCgoAB2ux1utxtz584FADQ0NKC2thbr168P+XsdDgccDke/7Xa7fcAvh5I2RnDztzORdukweJrPh7yPagP+saLp16apKVp619XVLfD06ydxviv0lQQbgKdfP4mi/MsUX8rWu6ZIFH3nnIm4+duZ/eq12+24cOGCot+jV24AsWeHkY9bb0qP4Y3f+ib2fGyeuqKhd03xyA1A/7oiiTU7osmNwVB9wPOsWbPwq1/9Cq+//jr++te/YteuXdiwYQN++MMfAui5bF1SUoLVq1dj165dqK2txf3334+kpCTMmzcPAOB0OvHggw9i6dKleOutt3D48GHce++9GDt2LKZOnar2LptGwhAbVs4aAyD8iqX+FU0pPg7Unes3c6G33k+KloGS75waq+QyN+JHq2NI4VktNwDjf+9Uv/JTVlaG//iP/8DChQvR2NiInJwcLFiwAL/4xS8CbZYtW4aOjg4sXLgQTU1NGD9+PCorKwNrdQDAxo0bcckll2Du3Lno6OjAlClTsG3bNsuv1TE9PxvP3fvdfusmuHqt8/NGnY47KDkrPil6oO+cGmt1MDfiS8kxNPLgWbOzYm4A2mRHrFTv/KSkpGDTpk3YtGlT2DY2mw2lpaUoLS0N2yYxMRFlZWUoKytTexd11dUtcKDuHBpbzyMzpeehetH2fKfnZ6NwjCvk5zDA+lPjb+5n1SdFR/rOqYG5EVm8c4P6Y26ow6jfO9U7PxSemitdcsVSZdReXfSmvDRkOxMHvI8t45Oi+Z3TB3NDe8wNdRnxe8cHm2rEyCtdyioef3Oj38cmuTA3tMfcsAZ2fjRg9JUuZRTPv7n/PrbLySdFU/wwN7TH3LAO3vbSQDQj/Y12adCs4v03N+p9bJIHc0N7zA3rYOdHA1Yd6a8nLf7mRryPTfJgbmiPuWEdvO2lASuP9NcL/+ZkdvwOa49/c+tg50cD/pH+4S5s2tAzk6DvSP+uboH9n57F7498gf2fnuW9/SjE+jcnMgrmhvaYG9bB214a8I/0f7j8EGxA0GC6cCP91Z5qaTWx/M2JjIS5oT3mhnXwyo9Gohnpz+mt6uDsiujxqoGxMDe0x9yInhlzg1d+NKRkpP9AUy1t6JlqWTjGxbMPBTi7QjleNTAm5ob2mBvKmTU32PnR2EAj/Tm9VX2cXTEw/1WDvv/x9F814Bmvvpgb2mNuDMzMucHbXgbD6a2kNS6mZ37MDdKa2XODnR+D4VRLuZjhXng0Vw3ImJgb8jF6dpg9N3jby2Cs/gA8mZjlXjivGpgfc0MuZsgOs+cGr/wYDB+AJwczzbzhVQPzY27IwyzZYfbcYOfHgDjV0tzMdi+cC7vJgblhfmbKDrPnBm97GRSnWpqX0nvhNfVN2u1UBFzYTR7MDXMzU3aYPTfY+TEwTrU0J6X3uM+0eeO8J8r5rxr0HWfgMtg4AxoYc8O8zJYdZs4Ndn6IVKb0HnfGpQ6cifO+RINXDYj0ZcbsMGtusPNDpDKlM28KRgzHnhNa711kvGpApB+zZocZc4MDnolUxpk3RBQLZod22PkhigOjz7wx+gJqRFbF7NAGb3sRxYlR74WbYQE1IitjdsQfOz9EIXR1C1WCx2j3ws38IEIiM2B2mAM7P0R9yHR209tAC6jZ0LOAWuEYl+5nmERmxOwwT3ZwzA9RL2ZZWj4WZn8QIZGRMTvMlR3s/BD9g15Lyx+oO6fJ4EGzP4iQyKi0zg7/57xxtEGTQccyZgdvexH9QzRnN2rci686cRoA8NPtB+Ht6rlUHM9L5GZ/ECGRUWmZHRW1DVjz+jEsGQ0se/lDeLtscb+1JmN28MqPjmSZMigLLc9uKmob8PhLR/ptj+clcrM/iJAuYnYYi1bZ4b+15mnR9taajNnBKz86kXVgnJlpdXaj1+BBsz+IkHowO4xHi+zQc9CxjNnBKz86kHlgnJlpdXaj5+BBoy+gRpExO4xJi+zQe9CxbNnBKz8xGMw6DjJOGZSFVmc3eg8eNOoCarIb7PovzA7j0iI79M4NQK7siMuVny+++AL33nsv0tPTkZSUhOuvvx41NTWB14UQKC0tRU5ODoYNG4bJkyfj2LFjQZ/h9XqxePFiZGRkIDk5GbNnz8apU6fisbtRqahtwK3r3saPN7+Px3YewY83v49b172t+IxL7947RabF2Y0RBg/6F1C78/rLMGFkuiHCi7kRGbPD2OKdHUbIDcCY2REL1a/8NDU14ZZbbsHtt9+ON998E5mZmfj000/xjW98I9Bm/fr12LBhA7Zt24arrroKv/zlL1FYWIiTJ08iJSUFAFBSUoLdu3dj586dSE9Px9KlS1FcXIyamhokJCSovduKqLHCpRF67xRZvM9u/JfIm9o6Qr7uf3KzGoMH1VptNt6YGwP/h5HZYXzxzI7eT3wPxYq5MRiqd37WrVuH3NxcbN26NbDtyiuvDPyzEAKbNm3CihUrMGfOHADA9u3bkZWVhR07dmDBggVobm7Gli1b8OKLL2Lq1KkAgPLycuTm5qKqqgrTpk1Te7cHpNYlZ6P03imyeC4t779EXvK7mn6vqXl7zUwDY5kbA9+qYnaYQ7yyo++ttd6smhuDofptr9deew033HAD/vmf/xmZmZkYN24cNm/eHHi9rq4OHo8HRUVFgW0OhwOTJk1CdXU1AKCmpgY+ny+oTU5ODvLz8wNttKbWJWcZpwxS9KbnZ2PjXdf32977EvlgpjObbWAsc2PgW1XMDvLfWstKDX9rzUq5MRiqX/n57LPP8Nxzz2HJkiX493//dxw4cACPPvooHA4HfvKTn8Dj8QAAsrKygt6XlZWF+vp6AIDH48HQoUMxfPjwfm387+/L6/XC6/UGfm5paQEA+Hw++Hy+kO/xbw/3em+NzV/DkTDwl6ix+Wv4fKkR2/xi5tWBNV5CDYz7xcyr0d11Ad1dA/66fqKpyUxkrGvSt9PgrgP+995xONfRhYxLHSgYMRwJQ2x488NTWPvmR0HrebhSE/HUjNGYek1WhE/tudqw5vVjGBrm+2oDsOb1Y5g8Kj7363sfK6XHS6/cAKLPDr1yA2B2REvGmqZcnYFb8ybgraoqrP/htchITbJsbgyGTQih6upYQ4cOxQ033BB0pvXoo4/i4MGD2L9/P6qrq3HLLbfgyy+/RHb2xUtoDz30ED7//HNUVFRgx44deOCBB4ICCQAKCwsxcuRIPP/88/1+b2lpKVatWtVv+44dO5CUlKRihUSkVHt7O+bNm4fm5makpob/j7teuQEwO4iMRmluDIbqV36ys7MxZsyYoG3XXHMNXn75ZQCAy+UC0HOW1jvEGhsbA2d1LpcLnZ2daGpqCjqLa2xsxMSJE0P+3uXLl2PJkiWBn1taWpCbm4uioqKwfzyfzwe3243CwkLY7faIdXV1C0zb9B5Ot5wPef/eBiArNRF7Sm6Latp7TX0TzrR5g876ByOamsxExrpC1eT/nvVdwdWv7/cs1HdozzEPlr384YC/f/2PvoPvj1X/Hn7vujo6Qg/q7kuv3ACizw69c8P/ucyOgclYE9C/LqvmxmCo3vm55ZZbcPLkyaBtH3/8MUaMGAEAyMvLg8vlgtvtxrhx4wAAnZ2d2Lt3L9atWwcAKCgogN1uh9vtxty5cwEADQ0NqK2txfr160P+XofDAYfD0W+73W4f8EuvqA2A5TOvxcPlhwCEvuS8fOa1SHQMjfg5fT/zlqsiX4qMlZKazEjGunrX9MGnZ1Hf5AXCjuwA6pu8OHyqFc0dnSEHJt59Y27gWWGRZDqT4/q3tNvtuHDhgqK2euUGEHt26JUb/s9ldignY03AxbqsmhuDoXrn5/HHH8fEiROxevVqzJ07FwcOHMALL7yAF154AQBgs9lQUlKC1atXY9SoURg1ahRWr16NpKQkzJs3DwDgdDrx4IMPYunSpUhPT0daWhqeeOIJjB07NjCLQw/+wWZ9vzguCUfCU2TxmgqqdJqy+7gHW//415DTpzdWfYJvJNnR3O4Le7VBrSmxamFukFXEIzusmhuDoXrn58Ybb8SuXbuwfPlyPP3008jLy8OmTZtwzz33BNosW7YMHR0dWLhwIZqamjB+/HhUVlYG1uoAgI0bN+KSSy7B3Llz0dHRgSlTpmDbtm26rdXhJ9MKlxSbeE4FVTpN+dUjX0acPu1nlufwMDfICuKVHVbNjcGIy+MtiouLUVxcHPZ1m82G0tJSlJaWhm2TmJiIsrIylJWVxWEPByeea8CQsam1YF04vRcyC3f2NTzZjnNfd4b9DAHgq3YfHp96FXYe/JtprjYwN0hm8cwOK+dGrPhsLyKFtHi2kpJnBP3w+suw5Y9/HfCzrsxIwr4n7+DVBiKdxTs7mBvR41PdiRTS6tlKAz0jaOoYl6LPyUxJlOY5PERmpkV2MDeiwys/RApp+WylSGNEurrFgJe4ZRqYSGR2WmUHc0M5dn6IFNL62UrhxogoucQt08BEIrPTMjuYG8rwtheRQkZ6ttJAl7hlGphIZHZGyQ7mxkW88kOkkNHOnDh9msgcjJQdzI0e7PwQRcFoC9Zx+jSRORgpO5gb7PwQRY1nTkQUC2aHcbDzQxQDq545xeuxHkRWwewwRnZYuvPT1d1z5/WNow3IdCbrfjCIjCyej/UwowN153Cm/YIhgpzIyIyYHZbt/FTUNmDN68ewZDSw7OUP4e2y6X4wiIwq3o/1MJOqE6cBAD/dfjDwFGxmB1FoRs0OS0519x8MT0vwglL+g1FR26DTnhEZz0BL8wM9S/P7r6TKrKK2AY+/dKTfdmYHUX9Gzg7LdX6MfDCIjEirx3oYHbODKDpGzg7LdX6MfDCIjEjLx3oYGbODKDpGzg7LjfnR4mAYbVQ70WBo/VgPo2J2EEXHyNlhuc5PvA+GEUe1Ew2Gf2l+qz8QkdlBFJ1osqO764Km+2a5217xfMaKfyB130vjHAxJZuZfmh9Av39vrPRARGYHUXSMnB2W6/zE62BwMCTJjA9EDM6OvpgdRKEZNTssd9sLuHgw1rx+DMDXge2DecZKNIMhrbi6J5kfl+bv+RtsvOt6dNbVBG1ndhCFZ8TssGTnB+g5GJNHpWNPxZtY/6PvDHqFZyOPaidSi1WX5u9t6jVZeKMO+L/5N6qywjOzg6zAaNlh2c4PgEBYfX9sNux2+6A+y8ij2okGgzOQQrspL23QuQEwO0heRs4OS3d+1MQZMSQjzkCKP2YHycjo2WG5Ac/xYuRR7USx4AwkbTA7SDZmyA52flRk1FHtRNHiDCRtMTtIFmbJDt72UpkRR7UTRYszkLTH7CAZmCU72PmJA6ONaieKFmcg6YPZQWZnluxg54dII31nPoy7PEXvXQqLM5CIjCHUjCkjM0t2sPNDpIFQMx9GDHdgyWgddyoCzkAi0l+4GVO/mHm1jnsVmVmygwOeieIs3MyH0y09P1edOK3HbkXEGUhE+oo0Y+rxl47os1MKmCU72PkhiiMlMx/WvvmR7jMfQuEMJCJ9KMkNfzsjMkN28LYXURwNNPMBADwt+s98CIczkIi0p2TGFADU1DfhlquytNmpKBk9O9j5IYojs8x8iIQzkIi0pTQPzrR547wng2Pk7Ij7ba81a9bAZrOhpKQksE0IgdLSUuTk5GDYsGGYPHkyjh07FvQ+r9eLxYsXIyMjA8nJyZg9ezZOnToV790lUpVZZj4YDXODrExpHmRc6ojznsgrrp2fgwcP4oUXXsB3vvOdoO3r16/Hhg0b8Oyzz+LgwYNwuVwoLCxEa2troE1JSQl27dqFnTt3Yt++fWhra0NxcTG6urriuctEqvLPfIh0odeVqv/MByNhbpDVDZQb/u0FI4ZrtUvSiVvnp62tDffccw82b96M4cMvHiAhBDZt2oQVK1Zgzpw5yM/Px/bt29He3o4dO3YAAJqbm7FlyxY888wzmDp1KsaNG4fy8nIcPXoUVVVV8dplItUpmfnw1IzRhrkPrjfmBpGy3PC3o9jErfPzyCOPYObMmZg6dWrQ9rq6Ong8HhQVFQW2ORwOTJo0CdXV1QCAmpoa+Hy+oDY5OTnIz88PtNFDV7fA/k/P4vdHvsD+T88adqQ9GUu4mQ9ZqT0/T73GmAMW9cDcIOoRacbUxruu12enJBKXAc87d+7EoUOHcPDgwX6veTweAEBWVnDgZ2Vlob6+PtBm6NChQWd+/jb+9/fl9Xrh9V4c/NXS0gIA8Pl88Pl8Id/j3x7u9d6qTpzG2jc/gqfl4kA0V2oinpox2lD/8YqmJjMxe11Trs7A5FHfQ019E860eZFxqQPXXXYp3qqqMm1N4fQ+VtHUpkduANFnh4y5AZj/37FQzF5TqNwoGDEc3V0X4K4zb12hxJobsVK98/P555/jscceQ2VlJRITww/astmCL9cJIfpt6ytSmzVr1mDVqlX9tldWViIpKSni57rd7oiv+/VfjfdrdNbV4I06RW/XlNKazEaWus4AeOtEzz/LUlNfbrcb7e3titrqlRtA7NkhY24Acn4fZanpDIA9Jy7+LEtdvUWTG4OheuenpqYGjY2NKCgoCGzr6urCe++9h2effRYnT54E0HOWlp19caGjxsbGwFmdy+VCZ2cnmpqags7iGhsbMXHixJC/d/ny5ViyZEng55aWFuTm5qKoqAipqakh3+Pz+eB2u1FYWAi73R6yTVe3wLRN7wWdufVmQ8/tiz0ltxni/quSmsxIxrpkrAkIrqujo0PRe/TKDSD67JAxNwA5v48y1gTIWVcsuTEYqnd+pkyZgqNHjwZte+CBBzB69Gg8+eST+Na3vgWXywW3241x48YBADo7O7F3716sW7cOAFBQUAC73Q632425c+cCABoaGlBbW4v169eH/L0OhwMOR/9pf3a7fcAvR6Q2H3x6FvVNXvQfdnZRfZMXh0+1Gmo9AyV1m5GMdclYE9BT14ULFxS11Ss3gNizQ8bcAOT8PspYEyBnXdHkxmCo3vlJSUlBfn5+0Lbk5GSkp6cHtpeUlGD16tUYNWoURo0ahdWrVyMpKQnz5s0DADidTjz44INYunQp0tPTkZaWhieeeAJjx47tNxAy3mRYpI7I6JgbRKQlXVZ4XrZsGTo6OrBw4UI0NTVh/PjxqKysREpKSqDNxo0bcckll2Du3Lno6OjAlClTsG3bNiQkJGi6r1ykjqyiq1sYdil6gLlBZERGz41wNOn8vPvuu0E/22w2lJaWorS0NOx7EhMTUVZWhrKysvju3AD8i015ms+HfMicDT1TD7lIHZlZRW0DVu0+HvQ8oWxnIlbOGqPbQwiZG0TGZsTcUIpPdR+AksWmVs4aY4qeLlEoFbUNeLj8UL8HKXqaz+Ph8kOoqG3Qac/Mi7lBsjN7brDzo0Ckxaaeu/e7hu/hEoXT1S2wavfxkFcn/NtW7T7OhfliwNwgWcmQG3yqu0LT87NROMZlynubROEcqDvX78ytNwGgofk8DtSdM9ysJDNgbpCMZMgNdn6ikDDEZtgDSRQLzkqKP+YGyUaG3GDnh8gg9Jg1wVlJRObG3IgNOz9EBqDXrAnOSiIyr6oTp/H06yeZGzHggGcinVWdOK3brAnOSiIyr8dfOsLciBE7P0Q6W/vmR7rOmuCsJCJz8ecBcyN2vO1FpLOeh1+GPkPSatYEZyURmUdNfVPE15kbA2Pnh8gEtJg1wVlJROZwps2rqB1zIzze9iIyASPPmiAibWVc6lDUjrkRHq/8/INZH85G5udKTcTfmryaz5rgd37w+DckPRSMGI49J8LdLI//bCsZvvfs/EC/6YJEAPDUjNFYuOPPsCF4AGM8Z02Y+YGERsHcIL30zgMtcwOQJzt42wv6TRckAoCp12RpOmvC7A8kNArmBult413XazrbSqbssPSVn4GmC9rQM12wcIzLdJf0yFy0mjUx0AMJ+Z0fGHODjGLqNVkoyr9Mk1tQsmWHpTs/RpkuSARoM2tChgcS6o25QUai1Wwr2bLD0re9jDRdkEgLMjyQUG/MDbIi2bLD0p0fThckq5HhgYR6Y26QFcmWHZbu/BSMGA4g8nTBbIM/nI0oGv4HEvI7HzvmBlmRbNlh6c5P3+mCvZnl4WxE0ZDhgYR6Y26QFcmWHZbu/PhpPV2QSE9mfyChUTA3yGpkyg5Lz/by03K6IJERmPmBhEbB3CArkiU72Pn5B7M+nI3kFs9l5PmdHzz+DcmomB2RsfNDZFCyLCNPRNpidgyMY36IDEimZeSJSDvMDmXY+SEymIGWkQd6lpH3P2aBiAhgdkSDnR8ig4lmGXkiIj9mh3Ls/BAZjGzLyBORNpgdyrHzQ2Qwsi0jT0TaYHYox84PkcHItow8EWmD2aEcOz9EBiPbMvJEpA1mh3Ls/BAZkEzLyBORdpgdyqje+VmzZg1uvPFGpKSkIDMzEz/4wQ9w8uTJoDZCCJSWliInJwfDhg3D5MmTcezYsaA2Xq8XixcvRkZGBpKTkzF79mycOnVK7d0lMqzp+dnY9+Qd+N1DN+O/7r4ev3voZux78g4pw4u5QaQeK2VHrFTv/OzduxePPPII3n//fbjdbly4cAFFRUX4+uuvA23Wr1+PDRs24Nlnn8XBgwfhcrlQWFiI1tbWQJuSkhLs2rULO3fuxL59+9DW1obi4mJ0dXWpvctEhuVfRv7O6y/DhJHp0l6uZm4Qqcsq2REr1R9vUVFREfTz1q1bkZmZiZqaGtx2220QQmDTpk1YsWIF5syZAwDYvn07srKysGPHDixYsADNzc3YsmULXnzxRUydOhUAUF5ejtzcXFRVVWHatGlq7zaRaSh9Zk88n+2jNuYGUXxFkwdmyo5Yxf3ZXs3NzQCAtLSe0eV1dXXweDwoKioKtHE4HJg0aRKqq6uxYMEC1NTUwOfzBbXJyclBfn4+qqurQ4aY1+uF1+sN/NzS0gIA8Pl88Pl8IffNvz3c62YkY02AnHXFUlPVidNY++ZH8LRcXKfDlZqIp2aMxtRrsqJuFw+964r1eGmVG0D02SHjdxGQsy4ZawKiryuaPNArO9TIjWjEtfMjhMCSJUtw6623Ij8/HwDg8XgAAFlZwX/ErKws1NfXB9oMHToUw4cP79fG//6+1qxZg1WrVvXbXllZiaSkpIj76Xa7lRVkIjLWBMhZV7Q1LRndd8vX6KyrwRt1sbWLF7fbjfb29qjfp2VuALFnh4zfRUDOumSsCYiurmjyQM/siDU3ohXXzs+iRYvw4YcfYt++ff1es9mCL6EJIfpt6ytSm+XLl2PJkiWBn1taWpCbm4uioiKkpqaGfI/P54Pb7UZhYSHsdvtA5ZiCjDUBctYVTU1d3QLTNr0XdDbWmw1AVmoi3nj0e/j+//vDgO32lNwWt8vYvevq6OiI+v1a5gYQfXbI+F0E5KxLxpoA5XUpzY09JbcBgOK28ciOweZGtOLW+Vm8eDFee+01vPfee7j88ssD210uF4Ces7Ts7IsjzxsbGwNndS6XC52dnWhqago6i2tsbMTEiRND/j6HwwGHw9Fvu91uH/BLr6SN2chYEyBnXUpq+uDTs6hv8qL/6h0X1Td5sfODLxS1O3yqFRNGpse4x8rY7XZcuHAhqvdonRtA7Nkh43cRkLMuGWsCBq5LaW4cPtUa+Ge9syOW3IiF6rO9hBBYtGgRXnnlFbz99tvIy8sLej0vLw8ulyvocl1nZyf27t0bCKiCggLY7fagNg0NDaitrY0YYkSyUvosnnc//ruqn6cV5gaR+pT+e/5mbQP++Jczqn6m0al+5eeRRx7Bjh078Pvf/x4pKSmBe+1OpxPDhg2DzWZDSUkJVq9ejVGjRmHUqFFYvXo1kpKSMG/evEDbBx98EEuXLkV6ejrS0tLwxBNPYOzYsYFZHERWovRZPH/4RFmAGe3ZPswNIvUp/ff8N/vrVf9Mo1O98/Pcc88BACZPnhy0fevWrbj//vsBAMuWLUNHRwcWLlyIpqYmjB8/HpWVlUhJSQm037hxIy655BLMnTsXHR0dmDJlCrZt24aEhAS1d5nI8PzP7PE0n4cYxOfY0LPSq9Ge7cPcIFKfWrkBGDc7YqV650eIgf/ENpsNpaWlKC0tDdsmMTERZWVlKCsrU3HviMzJ/8yeh8sPwQbEFGRGfrYPc4NIfWrkBmDs7IgVn+1FZBLhntmjFJ/tQ2Q9g80NQM7siPsih0Sknun52Sgc48KBunN4s7ZB0b36n0wYgRn52VKu0kpEA4slNxbdPhKjslK4wjMRGYP/mT2AsoGKM/Kz4z6tnYiMLdrcuOXb35Q6N3jbi8ik/IMZw52P2QBkSzRAkYgGj7nRg50fIpPyD2YE+i9LJuMARSIaPOZGD3Z+iEws3GBGGQcoEpE6mBsc80Nker0HMza2npd2gCIRqcfqucHOD5EEeg9mJCJSwsq5wdteREREZCnSXvnxrxjb0tISto3P50N7eztaWlqkeeKvjDUBctYlY01AcF0dHR0AlK3gbBQDZYcVjpssdclYEyBnXVrnhrSdn9bWVgBAbm6uzntCRK2trXA6nXrvhiLMDiJjiGdu2ISZTsmi0N3djS+//BIpKSmw2UIP4GppaUFubi4+//xzpKamaryH8SFjTYCcdclYExBcV0pKClpbW5GTk4MhQ8xxl32g7LDCcZOlLhlrAuSsS+vckPbKz5AhQ3D55ZcrapuamirNF8hPxpoAOeuSsSbgYl1mueLjpzQ7ZD9uMpGxJkDOurTKDXOcihERERGphJ0fIiIishRLd34cDgdWrlwJh8Oh966oRsaaADnrkrEmQN66/GStT8a6ZKwJkLMurWuSdsAzERERUSiWvvJDRERE1sPODxEREVkKOz9ERERkKez8EBERkaVYtvPz61//Gnl5eUhMTERBQQH+8Ic/6L1LYa1ZswY33ngjUlJSkJmZiR/84Ac4efJkUJv7778fNpst6H8333xzUBuv14vFixcjIyMDycnJmD17Nk6dOqVlKQGlpaX99tflcgVeF0KgtLQUOTk5GDZsGCZPnoxjx44FfYaR6vG78sor+9Vls9nwyCOPADDPcXrvvfcwa9Ys5OTkwGaz4dVXXw16Xa3j09TUhPvuuw9OpxNOpxP33XcfvvrqqzhXNzhmyQ4ZcwNgdhj5WJkqN4QF7dy5U9jtdrF582Zx/Phx8dhjj4nk5GRRX1+v966FNG3aNLF161ZRW1srjhw5ImbOnCmuuOIK0dbWFmgzf/58MX36dNHQ0BD439mzZ4M+52c/+5m47LLLhNvtFocOHRK33367uO6668SFCxe0LkmsXLlSXHvttUH729jYGHh97dq1IiUlRbz88svi6NGj4q677hLZ2dmipaXFkPX4NTY2BtXkdrsFAPHOO+8IIcxznN544w2xYsUK8fLLLwsAYteuXUGvq3V8pk+fLvLz80V1dbWorq4W+fn5ori4WKsyo2am7JAxN4Rgdhj5WJkpNyzZ+bnpppvEz372s6Bto0ePFk899ZROexSdxsZGAUDs3bs3sG3+/PnizjvvDPuer776StjtdrFz587Ati+++EIMGTJEVFRUxHN3Q1q5cqW47rrrQr7W3d0tXC6XWLt2bWDb+fPnhdPpFM8//7wQwnj1hPPYY4+JkSNHiu7ubiGE+Y6TEKJfiKl1fI4fPy4AiPfffz/QZv/+/QKA+Oijj+JcVWzMnB0y5IYQzI5wjFaX0XPDcre9Ojs7UVNTg6KioqDtRUVFqK6u1mmvotPc3AwASEtLC9r+7rvvIjMzE1dddRUeeughNDY2Bl6rqamBz+cLqjsnJwf5+fm61f3JJ58gJycHeXl5uPvuu/HZZ58BAOrq6uDxeIL21eFwYNKkSYF9NWI9fXV2dqK8vBw//elPgx6Qabbj1Jdax2f//v1wOp0YP358oM3NN98Mp9NpmFp7M3t2yJIbALPDTMfKz2i5YbnOz5kzZ9DV1YWsrKyg7VlZWfB4PDrtlXJCCCxZsgS33nor8vPzA9tnzJiB3/72t3j77bfxzDPP4ODBg7jjjjvg9XoBAB6PB0OHDsXw4cODPk+vusePH4/f/OY32LNnDzZv3gyPx4OJEyfi7Nmzgf2JdIyMVk8or776Kr766ivcf//9gW1mO06hqHV8PB4PMjMz+31+ZmamYWrtzczZIUtuAMwOMx2r3oyWG9I+1X0gvXvTQE849N1mRIsWLcKHH36Iffv2BW2/6667Av+cn5+PG264ASNGjMDrr7+OOXPmhP08veqeMWNG4J/Hjh2LCRMmYOTIkdi+fXtgEF8sx8hIx3HLli2YMWMGcnJyAtvMdpwiUeP4hGpvxFp7M2N2yJIbALMDMM+xCsUouWG5Kz8ZGRlISEjo10NsbGzs1yM1msWLF+O1117DO++8g8svvzxi2+zsbIwYMQKffPIJAMDlcqGzsxNNTU1B7YxSd3JyMsaOHYtPPvkkMHMj0jEyej319fWoqqrCv/zLv0RsZ7bjBEC14+NyuXD69Ol+n//3v//dMLX2ZtbskDk3AGaHWY6V0XLDcp2foUOHoqCgAG63O2i72+3GxIkTddqryIQQWLRoEV555RW8/fbbyMvLG/A9Z8+exeeff47s7GwAQEFBAex2e1DdDQ0NqK2tNUTdXq8XJ06cQHZ2NvLy8uByuYL2tbOzE3v37g3sq9Hr2bp1KzIzMzFz5syI7cx2nACodnwmTJiA5uZmHDhwINDmT3/6E5qbmw1Ta29myw4r5AbA7DDLsTJcbigeGi0R/3TVLVu2iOPHj4uSkhKRnJws/vrXv+q9ayE9/PDDwul0infffTdommN7e7sQQojW1laxdOlSUV1dLerq6sQ777wjJkyYIC677LJ+Uwgvv/xyUVVVJQ4dOiTuuOMO3aZ3Ll26VLz77rvis88+E++//74oLi4WKSkpgWOwdu1a4XQ6xSuvvCKOHj0qfvzjH4ecEmmUenrr6uoSV1xxhXjyySeDtpvpOLW2torDhw+Lw4cPCwBiw4YN4vDhw4Ep3Wodn+nTp4vvfOc7Yv/+/WL//v1i7NixppjqbobskDE3hGB2GPlYmSk3LNn5EUKI//7v/xYjRowQQ4cOFd/97neDpn8aDYCQ/9u6dasQQoj29nZRVFQkvvnNbwq73S6uuOIKMX/+fPG3v/0t6HM6OjrEokWLRFpamhg2bJgoLi7u10Yr/vUd7Ha7yMnJEXPmzBHHjh0LvN7d3S1WrlwpXC6XcDgc4rbbbhNHjx4N+gwj1dPbnj17BABx8uTJoO1mOk7vvPNOyO/c/PnzhRDqHZ+zZ8+Ke+65R6SkpIiUlBRxzz33iKamJo2qjI1ZskPG3BCC2WHkY2Wm3LAJIYTy60RERERE5ma5MT9ERERkbez8EBERkaWw80NERESWws4PERERWQo7P0RERGQp7PwQERGRpbDzQ0RERJbCzg8RERFZCjs/REREZCns/BAREZGlsPNDRERElsLODxEREVnK/wchSzPua2kQ+AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, (ax1,ax2) = plt.subplots(1,2)\n", "\n", "gdf.plot(ax=ax1, aspect='equal')\n", "ax1.grid()\n", "\n", "gdf_xy.plot(ax=ax2, aspect='equal')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Line Data\n", "\n", "The line data stored as shape file will be loaded as GeoDataFrame. It consists of the same columns as the shape file containing points. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.157640Z", "start_time": "2020-12-29T14:35:58.113362Z" } }, "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", "
idformationgeometry
0NoneSand1LINESTRING (0.25633 264.86215, 10.59347 276.73...
1NoneTonLINESTRING (0.18819 495.78721, 8.84067 504.141...
2NoneTonLINESTRING (970.67663 833.05262, 959.37243 800...
\n", "
" ], "text/plain": [ " id formation geometry\n", "0 None Sand1 LINESTRING (0.25633 264.86215, 10.59347 276.73...\n", "1 None Ton LINESTRING (0.18819 495.78721, 8.84067 504.141...\n", "2 None Ton LINESTRING (970.67663 833.05262, 959.37243 800..." ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "import gemgis as gg\n", "\n", "gdf = gpd.read_file(file_path + 'interfaces_lines.shp')\n", "\n", "gdf.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inspecting the geometry column\n", "\n", "The elements of the geometry columns can be accessed by indexing the GeoDataFrame. It can be seen that the objects in the ``geometry`` column are Shapely objects." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.173654Z", "start_time": "2020-12-29T14:35:58.159643Z" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.189653Z", "start_time": "2020-12-29T14:35:58.175652Z" } }, "outputs": [ { "data": { "text/plain": [ "'LINESTRING (0.256327195431048 264.86214748436396, 10.59346813871597 276.73370778641777, 17.134940141'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry.wkt[:100]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.204657Z", "start_time": "2020-12-29T14:35:58.191656Z" } }, "outputs": [ { "data": { "text/plain": [ "shapely.geometry.linestring.LineString" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(gdf.loc[0].geometry)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting the Coordinates to Point Objects\n", "\n", "The resulting GeoDataFrame has now an additional ``X`` and ``Y`` column. These values represent the single vertices of each LineString. The geometry types of the shapely objects in the GeoDataFrame were converted from LineStrings to Points to match the X and Y column data. The ``id`` column was dropped by default. The index of the new GeoDataFrame was reset.\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.252668Z", "start_time": "2020-12-29T14:35:58.206660Z" } }, "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", "
formationgeometryXY
0Sand1POINT (0.25633 264.86215)0.26264.86
1Sand1POINT (10.59347 276.73371)10.59276.73
2Sand1POINT (17.13494 289.08982)17.13289.09
3Sand1POINT (19.15013 293.31349)19.15293.31
4Sand1POINT (27.79512 310.57169)27.80310.57
\n", "
" ], "text/plain": [ " formation geometry X Y\n", "0 Sand1 POINT (0.25633 264.86215) 0.26 264.86\n", "1 Sand1 POINT (10.59347 276.73371) 10.59 276.73\n", "2 Sand1 POINT (17.13494 289.08982) 17.13 289.09\n", "3 Sand1 POINT (19.15013 293.31349) 19.15 293.31\n", "4 Sand1 POINT (27.79512 310.57169) 27.80 310.57" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Data\n", "\n", "The figures below show the original line data and the extracted point data with the respective X and Y data using ``matplotlib``. It can be seen that the single vertices the original LineStrings were made of were extracted.\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.522520Z", "start_time": "2020-12-29T14:35:58.254672Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAD9CAYAAAC80X2fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtfUlEQVR4nO2deVwTd/rHP0kI4RDCJQQEFRVP8MLbtl6AWI+29lZbu9vD1mPr0e2xbbe43WqPX9Wu9q5VW6t2u609LRU8q6goiIrgjYhIQO475/z+CImAQCZhkswkz/v18tUy+eY73y8zPPPMc4oYhmFAEARBEAThAogdvQCCIAiCIAh7QYoPQRAEQRAuAyk+BEEQBEG4DKT4EARBEAThMpDiQxAEQRCEy0CKD0EQBEEQLgMpPgRBEARBuAyk+BAEQRAE4TK4OXoBtkKv1+PGjRvw8fGBSCRy9HIIwiVhGAY1NTUICwuDWCyM9yySHQThWGwtN5xW8blx4wYiIiIcvQyCIAAUFBQgPDzc0ctgBckOguAHtpIbTqv4+Pj4ADD84nx9fdsdp9FosHv3biQkJEAqldpreTaF9iQMXGFP1dXViIiIMP09CgGSHbQnPuNs+wHsLzecVvExmqh9fX3NCi8vLy/4+vo61U1Ee+I/rrQnIbmMSHbQnviMs+0HsL/cEIbTnSAIgiAIggOc1uJDEARBdB6dnkF6XjlKahoR7OOBUZEBkIiFY8Ezkp5XjtJ6raD3QHADKT4EQRBEmyRnF2HlLzkoqmo0HQuVe+CNmQORGB3qwJWxJzW3GADw1y3HodIZlB2h7YHgFnJ1EQRBELeRnF2E57ZmtlB6AEBZ1YjntmYiObvIQStjT3J2EZZ9m3XbcSHtgeAeUnwIgiCIFuj0DFb+kgOmjc+Mx1b+kgOdvq0R/MAZ9kDYBlJ8XASGYXCppMbRy+CERo0Ohy+VOnoZBOG0ZORX3GbpaQ4DoKiqEel55fZblIWk55ULfg+EbSDFx0XYd74EcWsO4qX/nQbDCPcNp6xWhYS1B/GXTcdxqaTW0cshCKekpEbFclz7ioWjYbs2ZTV/90DYBlJ8XACtTo9Vu84BAPy8pYKqqdKaAG939O7qDbVOj3/sPCNoJY4g+Mo7ybmsxgX7eNh4JdbDdm1v/nqWYn1cDFJ8XIAdxwtwqaQW/l5SLJzYx9HL6RQikQj/uicanlIJ0vPK8V3GdUcviSCcBmMGVEW9psNxIhgyo0ZFBthhVdYxKjIAoXIPmHvNK6/TUKCzi0GKj5NT06jButQLAIDnp0RB7in8Sp8RAV5YFh8FAFi1KxdltezM8gRBtI9Oz+Dt38+ZHWdUJN6YOZDXtXAkYhHemDmQ9XgKdHYdSPFxcj49cAWltWpEBnljzugejl4OZ/xlfCQGhPqisl6Dt35jZ5YnCKJ90vPKWcW7BHi74+N5wwVRAycxOhRrHx5qdhwFOrsWpPg4McXVjfji0BUAwEuJ/eDu5jyXWyoRY/XsGIhEwA8nC5F2mbK8CKIzsA3yfW36AEEoPUbiBoSwHsvnYG2CO5znSUjcxn/2XkajRo/YHv6YOkjh6OVwztAIP8wd3R0A8PqP2VBr9Q5eEUEIk+TsIrz561lWYxVyTxuvxnHwOVib4A5SfJwUZT3wv8xCAMA/7u4v6Eyujvj71P4I6uKOyzfr8PmfVxy9HIIQHMYKzeV1wg9o7giFb/uBzkLfG2EZpPg4Kb9cE0PPAFMHhSC2h/P+Mcs9pXhtuiGA8T97LuJaWb2DV0QQwqGj6sbNEUpAc0e8PK0/ANym/DjD3gjLIMXHCTl7oxrZFWJIxCK8mNjf0cuxOfcMDcO43oFQafX458/ZVNuHIFhirrqxESEFNLdH3IAQfDxvOBTylu4shdxD8HsjLMNixefgwYOYOXMmwsLCIBKJ8OOPP7b4nGEYJCUlISwsDJ6enpg4cSLOnm3pO1apVFiyZAmCgoLg7e2NWbNm4fr1lvVYKioq8Nhjj0Eul0Mul+Oxxx5DZWWlxRt0Rb4+dg0AcHd0CHp37eLg1dgekUiEN++NhrtEjP3nbyI5W+noJRGtOHz4MMkNHsI2mFdoAc3tkRgdikMvTcb2p8fgg0eGYvvTY3DopclOsTeCPRYrPnV1dRgyZAg2bNjQ5ufvvvsu1qxZgw0bNuD48eNQKBSIj49HTc2tPlFLly7Fzp07sWPHDhw6dAi1tbWYMWMGdDqdacycOXOQlZWF5ORkJCcnIysrC4899pgVW3QtyuvU+OW04cH/2JjuDl6N/ejdtQuendgbAJD0y1nUqrQOXhHRnPr6epIbPIRtMK8zBTRLxCKM7R2Ie4Z2w9jegS3cWzo9gyOXy/BTViGOXC6juj5OipulX5g2bRqmTZvW5mcMw2DdunV49dVXMXv2bADAli1bEBISgm3btmHBggWoqqrCxo0b8fXXXyMuLg4AsHXrVkRERCA1NRVTp05Fbm4ukpOTcfToUYwePRoA8Pnnn2Ps2LE4f/48+vXrZ+1+nZ5vjxdArdUjwpvB0HC5o5djVxZO7I2fsgqRX1aPNbsv4J8WFC8jbEt8fDzuv//+Nj8jueE4Ynv4I8DbHeV16jY/F8HgCnKFoN/k7CKs/CWnhesvVO6BN2YOJIuQk2Gx4tMReXl5UCqVSEhIMB2TyWSYMGEC0tLSsGDBAmRkZECj0bQYExYWhujoaKSlpWHq1Kk4cuQI5HK5SXgBwJgxYyCXy5GWltamAFOpVFCpblXwra6uBgBoNBpoNO1nKxg/62iMUNDq9Pj6yFUAwF0KPbRardNkc7G5ThIAb0zvj79+lYnNaXmYNTgEg8J87bRCy3Gme89I6z2x2Zsj5QbgurIjNbcYb/9+DnWNKsgkhmMyMWP6r1Fy/HN6P+h1Wuh1bc/Dd9hcp9TcYiz7NgsMYPpdAEBFbQOWbs/A2oeHWlQPyJYI/b5rC2vkRmfgVPFRKg0ulpCQljdISEgI8vPzTWPc3d3h7+9/2xjj95VKJYKDg2+bPzg42DSmNatXr8bKlStvO7579254eXmZXXtKSorZMXzndLkIN6ok8HZjMCyIcYo9tYbNnoYFinGyTIznvz6CpdE68D1Rw5mvU329+Sw7R8oNwLVlx/J2ch/eHHGrJpY6LwO78uy0IBti7jq9M6r9z/j4OxDyfdcelsiNzsCp4mOktZWBYRizlofWY9oa39E8r7zyCpYvX276ubq6GhEREUhISICvb/tv/RqNBikpKYiPj4dUKuw+Vjs2nQBQjjmje0Cqv+IUezJiyXWKvaMRif9JQ36tFtVdYzBnVISdVmkZznTvGWm9J6P1hA2OkBuA68kOnZ7B1HUH26zULBMzeHOEHu/nyPD70klOUe3d3HVKzyvHX7ccNzvPl/NH8sLlJ9T7riM6IzesgVPFR6EwVAdWKpUIDb3lEy0pKTG9zSkUCqjValRUVLR4eyspKcG4ceNMY4qLi2+b/+bNm7e9FRqRyWSQyWS3HZdKpaxuDrbj+MrF4hocuVIOsQiYN6YHstKuCH5PbcFmT+GBUryQ0BdJv+Tg/1IuYtrgMF5XZHXm68RmX46UG4DryY4Tl8uQX6HC7RVtblFcq8XpG7UY2zvQfguzMe1dp9J6LVQ682bh0notr66z0O47NlgiNzoDp+p8ZGQkFApFCxOcWq3GgQMHTMIpNjYWUqm0xZiioiJkZ2ebxowdOxZVVVVIT083jTl27BiqqqpMY4iWfNOUwh43IARhfs6TgWEtj43ticHhctQ0avHvX6mJKZ8huWFf2Kawu0rfKrYvRXx+eSIsw2KLT21tLS5dumT6OS8vD1lZWQgICED37t2xdOlSrFq1ClFRUYiKisKqVavg5eWFOXPmAADkcjmefPJJrFixAoGBgQgICMALL7yAmJgYU7bGgAEDkJiYiKeffhqffvopAOCZZ57BjBkzKDOjDRrUOnyfaahnMm+M83Rg7wwSsQir7ovBrA2H8POpG3ggNhx39e3q6GW5LLW1tbhy5VZLEZIbjoMvD3qdnkF6XjlKahoR7GPIHHNE5eRRkQEIlXtAWdXYZgVrV8pscxUsVnxOnDiBSZMmmX42+sbnz5+PzZs348UXX0RDQwMWLlyIiooKjB49Grt374aPj4/pO2vXroWbmxseeughNDQ0YMqUKdi8eTMkklvh9N988w3+9re/mbI4Zs2a1W4NEFfnl9M3UNOoRfcAL9zRJwg6HdWwAYDobnI8MS4SXx7Ow2s/ZmP3srvgIZWY/yLBOSdPnsSMGTNMP5PccBzmHvSAoa8V1w/65orO1dJ6bE+/1iLOyM9Tir+M74nFk6PsqgBJxCK8MXMgntuaCRHQ4ndC7SycE4sVn4kTJ3bYEkAkEiEpKQlJSUntjvHw8MD69euxfv36dscEBARg69atli7PJdnW5OZ6dFR3iMUi6ASadmoLlif0xe/ZRbhWXo/1ey/i71Odv4UHH7nzzjtJbvCIR0Z2x9rUC7cdNz7aX57Wn9MHfVs1clpT2aDB2tSL+OzPK3hkRATiBirsZgVKjA7Fx/OG37ZGBdXxcUpsktVF2I/swipkFVRCKhHhwRHhjl4O7+gic0PSrEFY8HUGPjt4BfcM7Ya+IT7mv0gQTog5BSTE1wNAHac1a3adLsLCbZmsx9epdNh4+Co2Hr5q1wKCidGhiB+o4IX7jbAtws9VdHG2pRusPYnRoQjqcntmiq0prGzA/zKu47Ufz2D177n45lg+Csr51SF96iAF4geGQKNj8OrOM9BTGXrCBUnOLsJzWzPbVXqWxUXhj6V3cXrOXadvYPF29kpPa4qqGvHs1kx8kHrBLu0jOmpnQTgPZPERMLUqLX46WQgAmDPKfn25LhTXYNPhqzh06SYKyhtu+1wsMigbT90Zidge/AgIXDlrEA5fKsXxqxX474kCPGLH3xdBOBqdnsHKX3LajekRAdhxvAAL7uzJ2fk27L3UpjvNGtamXsT29AIkzSK3E9F5SPERMD+eLESdWodeXb0xppftFYzLN2vxbvI5/HH2Vq0UiViEweFyjOwZALVWj9yiahzLK8fv2Ur8nq3EnVFB+MfdAzAg1LGtI8L8PLE8vi/+/VsuVv9+DnEDQxxiISMIR5CeV95hfA0Dg3UlI7+i0+dKzi5C0s9noaxWmR9sAcpqg/XnyfE97Rr/QzgfpPgIFIZhTLV75ozqbtOeXHo9gy1HruLt389BpdVDJAISBynw0MgIjOwZgC6ylrfReWUNvjyUhx9OXsefF0tx93/+xIOx4XghoR+CfR1XC+OJcT3xQ2Yhcoqq8dZvuVj78FCHrYUg7AnbmjyltdYpK8aMrZQcJb48fNWqOdjiiPgfwrmgGB+BcrKgErlF1ZC5ifFArO2Cmq+V1eOxL49h5S85UGn1uDMqCCnL7sLH82IxqV/wbUoPAPRT+OCdBwZjz/KJmD44FAwD/PfEdcStOYCdJ693mN1jS9wkYqyeHQORCNh5shCHL5U6ZB0EYW/Y1uSxxgqanF2EO97Zi0c/P2pzpac5yqpGPLc1E8nZRXY7J+EckOIjUL45arD2zBgcBj8vd87nr1Np8d4f5xC39gAOXyqDh1SMN+8ZhK/+Ogp9gtllRXUP9MKHc4bj++fGIaabHNWNWiz79hSe3Zph9ZtlZxkS4YfHm4o8vvZjNho1lPtPOD/G2j3t2YVFAELlHojt4d/OiNvR6Rl8kHoRz3YQMG1LmKZ//9h5Bmqt3txwgjBBio8AqaxX49fTNwAAc8dwG6TLMAx+PFmIye/vx4f7LkOt1WN8n0Ds+tudeGxsT6tcarE9/LFz4TisiO8LN7EIf5wtRsLag0jNub2vkj1YMbUfQnxlyCutw0f7LztkDQRhT4xF+oDbO3RZU6QvObsI49/e06ngZRGAGTGh8PPsXF+m8joNxqzeY3fLj07P4MjlMvyUVYgjl8vsknVGcAPF+AiQ7zMLodLqMTDUF8Mi/Dibt0Gtw8s/nMZPWQalKiLAE69NH4iEgSGdjiFyk4ixZEoUJg8Ixor/nsI5ZQ2e+uoEFk3qjeXx/ewapOjrIcUbMwdh4TeZ+Hj/JcwaEoY+wV3sdn6CcARsivRpNBqz8xjT4jv7mP9wzjDcPTisRXzQzpOFqKg3v4bWlNep8dzWTHw8b7hdYn7aqodEMUfCgRQfgWEIas4HYLD2cBXUnF9WhwVfZ+CcsgYSsQjPT4nCM3f14rzFw6AwOX5efAdW7crF5rSr+HDfZWQVVOI/jwxDoB2zrKZFKzC5fzD2nivBqzvPYMczY2waIE4QfKCzRfrMpcWzobWCYKydM7Z3IF6dPtDqNHgGwMvfn4GPhxRjetmuBk97ip8x5sheyhdhPeTqEhhHrpThys06eLtLcM/QbpzMefRKGWauP4RzyhoEdZFh21Oj8bcpUTbra+XuJkbSrEH44JGh8JRKcPhSGe796DCultbZ5HxtIRKJsHLWIHhIxTiWV47/ZVy327kJwpF0pkjf0StlnYrnWRYXhUMvTW5XMZCIRXg+LgqfzBuOULnlGaCVDRrM/eIY7nhnr01cXx0pfsZjK3/JIbcXzyHFR2AYU9jvHdatzYwqS0nJKcbjX6ajulGLYd398OuSOzC6V2Cn52XDPUO74afF49Ej0AsF5Q144JMjOHujyi7nBoCIAC8si+sLAFi1KxfVjZab2AnCVUjOLsKib6yrwhwq98An84bj+bi+rBStxOhQHHppMrY/PQZ/Hd/T4vPZKuOLbT2k9LxyTs9LcAspPgLiZo0Kf2QrAQBzR/fo9HzfZ1zHs1szoNbqETcgBNufHgOFFW9ZnaFviA++e3YsBoT6orRWhUc+PYpjV8rsdv6/3hGJPsFdUFGvwcY/8+x2XoIQEkb3TmWDZS8HT47vie1Pj+nQytMeRsvUP2cOwifzhiPAm30QtK2sL2zrIbEdRzgGUnwExH9PFECrZzC8ux8GhnWuEvKmw3lY8d0p6PQM7h8ejk/mDbeZa8scwT4e2PHMGIzqGYAalRaPf5mO/edL7HJuqUSM5fEGq8/GQ3moqFPb5bwEIRSsiesxWnhenzmIk55XidGhOPpKHAK82Zfu4LIatRG29ZDYjiMcAyk+AkGnZ7C9qSFpZ609+86VYOUvOQCAJ++IxHsPDIabxLG3gtxTiq+eHIW4AcFQafX42/aTuF5hn2aniYMUGBjqi1qVFp8evGKXcxKEUDDn3mmNuTgea3F3E2PVfdEQ4faU/I4oqebO+sK2HtKoSH70KCTahhQfgXDwwk1cr2iA3FOK6YOtFygl1Y1Y8d0pAMDjY3vgtekDIOZJvxsPqQQfz4vFkAg/VDdqsXRHFrQ62xcmE4tFWJFgsPpsTssjMzVBNKHTM6wrnPt5SS2K47EGY0q+JS75d/44z9n5ua6HRDgGUnwEgjGF/YHYcKtdUno9g2X/zUJ5nRoDQ33x6vQBvEvhlkrEWP/IMHSRueFEfgX+s/eSXc47uX8whnX3Q6NGj4/2UVFDgjC2otiwj93f4IeP2ieN2xj4/M2To1kVP6ysN7ivU3O5KZjanvKlkHtQKrtAIMVHABRWNmDvOUPMy5zR1ldq/vjAZRy+VAZPqQTr5wyDzM0xMT3m6B7ohbfuiwYAbNh7EUftEOwsEonwQkI/AMC2Y9dwo7LB5uckCL6SmluM51i2ojC6d8b0tk82KGCwvIyPCsLb98eYdXsZY5Pe/v0cZ4HOzbPOPnhkqNUB3IRjIMVHAHybfg16BhjXOxC9u1pXYTjzWgXWpBiKgq28Z5DV89iLe4Z2w4Ox4dAzwNIdWSizQ9DxuN6BGNMrAGqdHuvtZGkiCD6yetc5VsHMjnbvGK0vbDK+lNWNOHqZu5eotuohURsLYUCKD8/R6PTYcbwAgPVBzXUqLZ7fcRI6PYNZQ8LwoA27uXNJ0qxB6NXVG8rqRiz/7jRsLUNEIhFWNFl9vjtRgPwy+xVUJAg+Ucwyzo0P7p3E6FC8PmMQq7GLttmum3vzLvXP78jCo58ftVkhRaJzkOLDc/bkFqOkRoWgLjLEDwyxao73d19AQXkDuvl54q37onkX19Me3jI3fDIvFp5SCdIulyP5uu1v15E9AzChb1do9Qw+2HPR5ucjCC7prMXBkjiYxZN688a9o/BlF+xc2aDBs1sz8UHqBU6tMcY6R61dg7YqpEh0DlJ8eM7Wo4YU9odHhsPdzfLLdfJaBTalGQrzrZodAx+PznVCtjd9Q3ywenYMAGD3dREOXmSXYdIZjLE+P54sxKWSGpufjyC4oLMWB52ewepd51ifb3yfrrzJXjKXZt6atakXMf5tbqwx1MZCeJDiw2PySutw6FIpRCLgkZGWBzVrdXq88sMZMAwwe1g3TOjb1QartD33DuuGOaPCwUCE5d+dRp6Ne3rFhMsxdVAI9AxMcVEEwWe4sDhs2HuRtYuLb7VqmqeZs0VZzY01htpYCA9SfHiMsWDhpH7BiAjwsvj7Xx8rwDllDeSeUrw6fQDXy7Mr/5jWHz27MKhq0OKpLcdt3ldreXw/iETArjNKZBVU2vRcBNEZuLA4JGcXYW0qe9cuH2vVGAOd2aS4N6ez1hhqYyE8SPHhKY0aHb47YQxqttzaU6kCPthjyEx6eVp/BHaRcbo+eyNzE+PJfjoofGW4fLMOS7adtKnpuJ/CB/cPNwSBr96VC4YhMzXBTzprcTAqTmxZFteXF3E9bZEYHYoP5w5nPZ4Lawy1sWAHnzLeSPHhKbvOFKGiXoMwuQcm9gu2+Ps7r4pRp9ZheHc/PDwiwgYrtD++7sAnc4fBQyrGgQs3TUUdbcWy+L5wdxPjWF459p+/adNzEYS1dNbiYElLCoWvDIsn92G9NkcwplegRfE+QOesMdTGwjx8y3gjxYenbDlieKjPHdPDYpPyvvM3kVUuhkQswr/vjeFNSwouGBTmi1fvNrjt3vvjPG7WqGx2rm5+nvjLuJ4AuC1+RhBc0lmLg9KCXlZJswbxzsXVGmvifYK8rbeIUxuLjuFjxhspPjwkq6ASpwoq4S4R45GRlllr6tVarPw1FwDwxNjune7izkfmjO6BmG5y1DRqsfr3XJuea+HEPpB7SnG+uAY/ZF636bkIwho6Y3FIzi7Cm7+eZXUePru4WmNqK+HLTqFZ8d2pTj2AqY1F2/A1440UHx7yVdpVAMCMIaEWx+asS72IwspG+Lsz+Nvk3jZYneORiEV4895oiETAD5mFNs2WkHtJsWiS4fe4JuUCGjU6m51LKHx15Cp+O12EBjX9LviAtRYH45t4eZ35RAEhuLhakxgdisMvT8GiiebXXcxBhhe1sbgdtvFnGfkV9lsUSPHhHaW1Kvx62vDHN39sT4u+e/ZGFTYeMtTseaCXHl7ublwvjzcMjfAzWcP++VO2Tbu4Pz62J8LkHiiqasSWJqXUVWnU6PBe8nks2paJM4VVjl4O0YSlFoeO3sSbI2r6JwQXV1tIxCI8N9Hw4hLi0/5LJFfWh7baWLgybGOnSmttF7LQFqT48IxvjxdArdNjSIQfhkT4sf6eTs/gHz+cgU7PIHFQCKL9nT8e5cWp/eHvJcU5ZQ0221Ah8ZBKsLypqOGH+y6Zuj27Igcv3ESNSguFrwdG9PB39HKIZlhicWAb0Bzg7e40rpq37ovp8HOqt8M9bOPPguycdUyKD4/Q6vTYetQQ1PzEOMv6cm06nIdT16vg4+GG1+7uZ4vl8Q5/b3e8lNgfgMENdb2i3mbnum9YN/RX+KC6UYuP9l+22Xn4zi9N1sgZg0OdKmjeWWBjcdDpGRy+xK4C+mvTBziF0gMA5SwbHSurGmy8EtdhVGRAh3FWxvizWDu/RHGu+Gi1Wrz22muIjIyEp6cnevXqhX/961/Q62+5IhiGQVJSEsLCwuDp6YmJEyfi7NmWAXYqlQpLlixBUFAQvL29MWvWLFy/7tzBpam5xSiqakSgtzvujmEvbPLL6vB/u88DAF69ewBCWPatcQYeGhGBkT39Ua/W4Z8/nbVZvR2JWISXphmUrM1pV1FY6XrCsV6tRWqOoZfTjCFhnM5NcsM+GNOKN+y7xGq8Qu5p4xXZD7ZWhTd/y6XeWhyRkqNEo7btMARHZrxxrvi88847+OSTT7Bhwwbk5ubi3XffxXvvvYf169ebxrz77rtYs2YNNmzYgOPHj0OhUCA+Ph41Nbf6Ii1duhQ7d+7Ejh07cOjQIdTW1mLGjBnQ6Zw3oNLornl0VHfI3CSsvsMwDF7+/gwaNXqM6x2Ihy3MAhM6YrEIq2fHQCoRYe+5Euw6o7TZuSb27YqxvQKh1urxfpOi6UrsPVeCBo0OEQGeGBIu53Rukhu2p7204rZwxtozsT38WdX3qahTU2NRDjDeb5X1bQfPy72kDnOjcq74HDlyBPfccw+mT5+Onj174oEHHkBCQgJOnDgBwPCgXrduHV599VXMnj0b0dHR2LJlC+rr67Ft2zYAQFVVFTZu3Ij3338fcXFxGDZsGLZu3YozZ84gNTWV6yXzgvPKGhy9Ug6JWIQ5FlRq3nG8AEeulMFDKsbbswcLpvM6l/QJ9sFzTZkbSb+cRVWDbdpZiEQivNxk9dl5shA5N6ptch6+8uspo5srjPP7jOSGbWEbzNwcZ6s9w7a+j63TrPlUwdhWsLnfPKUSxA9U2G1NzeE87eeOO+7AJ598ggsXLqBv3744deoUDh06hHXr1gEA8vLyoFQqkZCQYPqOTCbDhAkTkJaWhgULFiAjIwMajabFmLCwMERHRyMtLQ1Tp0697bwqlQoq1a3I8Opqw0NJo9FAo2n/QWj8rKMx9mDz4SsAgLj+XdHV243Vem7WqPDWb4Y6NsvjohDqK22xX0fviUvM7emZ8d3xS1Yh8srqsXpXDt6cZVkBM7YMVHjj7ugQ7Mouxju/5+KLx9mXx2+NkK5TVYMGe8+XAAASB3Ztd82t98R2b46SG4DwZQcb0vPKUV7bAJkZQ7JMbHhUrXkwBlP6BQlib+Zofp2m9AvCR3OGYOUvZ1HRjiXCSHltA45eKuHU6pWaW4y3fz/XomikwtcDL0/rj7gBIazmEMJ9x+Z+a/77tVZuWAvnis9LL72Eqqoq9O/fHxKJBDqdDm+99RYeffRRAIBSaXBFhIS0vMghISHIz883jXF3d4e/v/9tY4zfb83q1auxcuXK247v3r0bXl7mG3ympKSY35yNqNcC32dIAIjQFzewa9cNVt/75pIYtSoxIrwZdK04i127WsY7OHJPtqKjPU0PEWFDmQQ7jl+HouEqIn1ss4bhbkCySIIDF0vxwfbfESXv3BubEK7T/iIR1FoJunkxyMs8hKtmDAHGPdXXsws4d5TcAIQtOyzh3VHsx2rys7ArP8tma3EEza/TK9HsvlOaexS7OK6Rurx/6yN1UOdlYFeeZfPw/b5jc7+1/v1aKjeshXPF59tvv8XWrVuxbds2DBo0CFlZWVi6dCnCwsIwf/5807jWpnKGYcyazzsa88orr2D58uWmn6urqxEREYGEhAT4+rZfvVij0SAlJQXx8fGQSi3r6ssVm4/kQ60/j77BXbDkkbGs3AhZBZVIP5IOAFgzdzSGNkt958OeuIbtnop2ZuP7zBv4rUSOH+8fC3c32yQu5sty8fWxAhyo8seSh0dbleEklOvEMAzWr08DUIenJw/A9A5csa33ZLSemMNRcgMQtuxgy8f7L+FDFtmIX8wbhvILJwSxJ7a0dZ3S88rx1y3HzX7X38sdb8wcyNoa0x46PYOp6w622x5EBCDE1wN/LL3LrHtRCPcd29/vl/NHmiw+1sgNa+Fc8fn73/+Ol19+GY888ggAICYmBvn5+Vi9ejXmz58PhcLg01MqlQgNvRXUVFJSYnqbUygUUKvVqKioaPH2VlJSgnHjxrV5XplMBpns9qh9qVTK6uZgO45r9HoG3xwzdGGfP74n3N3dWX3n37sMwbX3Dw/HyF5d2xznqD3ZEnN7em36IOw7X4qLJXXYfLQAiybZptrs8/H98MPJGzhTWI3d50oxsxNZTny/TieuluPSzTp4SiWYPaK7RX9PbPflKLkBCFd2sCU5uwhr9lzB7XWdbyGCodjhyF5d8ccF/u/JGprvaUyfYAR08YSyqrHDOJTiGg0WbjvV6SDcE5fLkF+hQkfXIL9ChZPXazC2dyCrOfl8jcz9fo3325g+wS0UPUvlhrVw/jpcX18PsbjltBKJxJSWGhkZCYVC0cJMp1arceDAAZNwio2NhVQqbTGmqKgI2dnZHQowIXLw4k1cLauHj4cb7h3ajdV3vs+8jlPXq9BF5oaXEl2jZg9b/L3d8foMQxPTD/ZcxNXSOpucJ6iLDM/cZagI+/7u89DYsHK0o9l27BoAYOaQUPh62EYgkdywDcYgUzY4WzBzR9g70JltBePOdInnE3xv3Mq54jNz5ky89dZb+O2333D16lXs3LkTa9aswX333QfAYKpeunQpVq1ahZ07dyI7OxtPPPEEvLy8MGfOHACAXC7Hk08+iRUrVmDPnj04efIk5s2bh5iYGMTFxXG9ZIfyVVMX9gdjI+AtM2+Aa9To8E6ywdqzZHIfBLtQzR623Du0G+6MCoJaq8eL35+2WdbEU3dGItDbHVfL6vHfEwU2OYejqaxX49czhmyuOaMtK6ppCSQ3bAPbCs1LBdSAlCuMbT4CvDtW5o0VnY9eLrP6XGwrGLMdx2eMWWsqrR5L46IQ0qqAIR8at3Lu6lq/fj1ef/11LFy4ECUlJQgLC8OCBQvwz3/+0zTmxRdfRENDAxYuXIiKigqMHj0au3fvho/PrWjUtWvXws3NDQ899BAaGhowZcoUbN68GRIJu/o2QiC/rA77mjJlHhvL7qHy86kbKK1VoZufJ/4yPtKWyxMsIpEIb90bg8QPDiI9rxyf/3kFz07gvmGrt8wNiyf3wcpfcvCfPRcxe1g4PN2d5/4EDE1g1Vo9BoT6cl67pzkkN9ih0zNIzytHSU0jgn0MdXY6emtuL6akNT2DzAdxOyOJ0aFo0Oix7Nsss2MXbcvE2/fHWPXAHhUZgFC5h1nXj9DrJiVnF2HlLzktlG2FrweWxfVFzyAvVvesPeBc8fHx8cG6detMaahtIRKJkJSUhKSkpHbHeHh4YP369S0KmDkbW4/mg2GAif26IjLI2+x4hmFMTTIfG9vDZoG7zkD3QC+8MXMgXvr+DN7ffR53RgVhUBj3D+45o7vjiz/zUFjZgC1HrtpEwXIUDMNge7rBzTVnVIRNa0SR3DBPWw+VULkH3pg5sM2HcXJ2Ed789extx9vCGSwN1qJgaTWvbNDgua2ZVlkrjK6f57ZmQgS0UH744PrhAmPBwtaKXXF1I9alXsDH84azjl+yNfTkdBD1ai2+Pd4U1MyyC3vmtUqcvVENmZsYD49wrQrN1vDQiAgkDAyBRsdg6Y4sNGq4r94rc5NgWXxfAMDH+y/brHiiI8jIr8DFklp4SiW4Zxi7+DPCNrRXdVlZ1dhmlWHj+PK6ju9HZ6zQbClGawxblcPaeB+ja00hb6loKeQe+HDOcMg93QVb1LCjgoW2LghpDZxbfAh2/JR1A9WNWnQP8MKEvm1nZbXm6yNXAQCzhoTB39t89perIxKJ8Pb9g3Gy4CAultTineRzeGPmIM7Pc9+wbvj0wGVcLKnFZwcv4+9TbyvUIUjsEdRMmMfcQ0UEw0MlfqACErGIdZVmZ7E0dJbm1hhzNO/gbo31IjE6FPEDFS3clRV1Krz5G3tLHh8xF0vW2d8b15DFxwEwDGMKan58bA9WNWBKa1X4rSnI9HGWFiICCPB2x3sPDAZg6IWWXVjF+TkkYhH+PtWQXffloatOkZlRq9JiV5MV4ZFR7FuoENxjyUOFzXgjAd7uDg8y5QtGa4yfJzsFvzN/4xKxCGN7B+Keod1Q1aDGom0nWVvy+IrQstZI8XEAZ29UI7eoGu4SMR6IDWf1nd1ni6HRMYjpJkeMDYNMnZGJ/YIxa0gYGAZ489ccm3Rwjx8YgmHd/dCg0WHDXnadr/nM72eK0KjRo1dXbwxrVhyTsD+WPlTYjn9t+gBSepqRGB2KD+eya0HDRUyU0NxDHSG0rDVSfBzA/zKuAwDiB4XAz4udy2pPbjEAYOqgzlUQdVVemtYfMjcxjuWV44+zxZzPLxKJ8GKTi2vbsWu4Vmbbkuu25ofMQgCGApmu2PiWT1j6UGE7XiH3tHpNzsqYXoFm4338PKXQM0ynFRJLLXl8xlycFN9iyUjxsTNqrR4/ZRkeKg+ytPY0qHU4dKkUADClk6XTXZVufp545q5eAIDVv+dCpeU+0Hls70DcGRUErZ7B+r0XOZ/fXlyvqMeRK4aaJfdSULPDsfShMioyoMNMJb49hPhER4X3jFQ2aDD3i2O44529nXJFCc091BF8L1jYGlJ87Mzec8WoqNcgxFeGO6PYBTWnXS6FSqtHmNwD/RU26rzpAjw7oTeCfWTIL6s3lQXgmuVNGV4/nCwUrNXnpyxDk9yxvQLRzY+sAo7G0odKSo4Sje0o9nx8CPGN9rKvWtPZOByhuYfaQwgFC1tDWV12xujmum9YOGvBs+ecocjhlAEh5HboBN4yN7wwtR9e/N9prN9zCfcPD0dgl9t7NHWGYd39cVffrjh44SY+3HcJ7zQFVgsFhmHwfWbTPTqcrD18wfgwvq04XKvsn/ZqqRjx85Ji9WzrivC5Esbsq6OXy7BoWyYq2yhT0VZGnSU4Q1FDoRQsbA1ZfOxISU0j9p2/CQCsg5oZhsHeXIPiM3lAsM3W5io8MDwcg8J8UaPS4v92X7DJOZ6fYmiM+n3mdRSUC8vqc+p6Fa7crIOHVIxp0QpHL4doRmJ0KA69NBnbnx6DDx4Ziu1Pj8GhlyablBg2aewyNzHiB9J1ZYNELIJYLGpT6THSmXYWQnMPtaa92lLGgoUyNzHG9g7k5fpJ8bEjP528AZ2ewbDufugT3IXVd84UVkFZ3QgvdwnG9nJ8/QOhIxaLTLV8dhy/ZpP09tgeAbijjyHW56P9lzmf35b80GTtmTpIAR+q3cM7mqdCt36osEljV1arBBEsyxfYxtcs2mady6ujooZ8cw81R+gZaaT42AmGYUxuLrbWHgD4uSneYlK/YHhInaPfkKMZFRlgSm9P+vmsTdLbn4+LAgD8L6MAhZUNnM9vC9RaPX45ZbjfZg9nf48S/MCZgmX5Atv4GmM7C2uVn7YsefEDFThyuYyX1ZyFnpFGMT52IruwGueLayBzE2PG4DBW39HpGfxy2vAgumcou+8Q7Hjl7v5IySnGifwK/HzqBu4Zym08y8ieARjXOxBpl8vw0b5LeOu+GE7ntwU/ZhWiol6DYB8ZxvOguiphGc4SLMsnzMXhtMbaeB+jJc9IR33ZpvQLsmhuWyB0JZssPnbiuwxDX66pgxSQs6wOeuxKGYqrVZB7SjGxH8X3cEmo3BOLJxticVbtykW9Wsv5Of42xWD1+e+JAtzgudVHq9Pjw32GwotP3RkJNwmJBkdjzJZh+8ZPaezc0zwOxxxcWTnM9WVLzeW+DpmlCF3JJulmB1RanSlF2BI3l/E7d8coqBO7DXjqzkhEBHiiuFqFjX/mcT7/mF6BGB0ZAI2OwScH+B3r88vpG8gvq0eAtzvmju7h6OW4PMnZRbjjnb149POjeH5HFh79/KjZujGUxm4b7NnOgk3szNu/n7N6fq4QWsHC1tDT1A7syS1BVYMGoXIPjO/DzkzZqNGZeiVx7YYhDMjcJKaGop8evILSWhXn5zDG+uxIL4CSRf8kR6DTM6Y2G0/eEQlvGXnAHYmlndibf6eyvu0MJD8vKa+DZfmOJe0srpZan8nJJnZGWc0POfLIyIh20/ABfivZpPjYge9OGNxcs4d3Y30j7D9/EzWNWoPW3JOfWrMzMCMmFDHd5KhVabF+D/fVlsf2CsTInv5Q6/T44s8rnM/PBbvOFOHyzTrIPaV4fCxZexyJNdkylMZuH9i0swCAdakXrC5qyNeYmOYYrZFrU9uWl3zPSANI8bE518rqceCCoXbP/RZkyvzaFNQ8c0gYq+7thHWIxSK8crfB6vPNsWu4WlrH6fwikQgLJxliibalX0NFnZrT+TuLvpm156/jIymF3cFYky1Daez2wRjvwzbI2ZosLL7GxBhpzxppZFlc3xa1pfgKKT425pODl6FngAl9u6JXV3a1e9RaPQ40FTpMpCJyNmdc7yBM7NcVWj2Dd//g3n8+sW9XDAz1Rb1ah802apVhLbtzlDhfXAMfmRueGN/T0ctxeazJlhF6ho2QSIwOxbIm93V7dKaoIZvYmY4C2G2JOcuiCIbaaEKAFB8boqxqxP9OGGr3LGp662fD0StlqFFp0dVHhqHhfjZaHdGcl6f1h0gE7DqjxBErBFZHGKw+vQEAm9Ouok7FfQaZtXx8wOB+e2J8T9bZhoTtsCZbRugZNkKjZ5A3q3HWFDU01ySVgWWeAy4Reu2e5pDiY0M+//MK1Do9RvUMsCi6fXeOEgAQNyCY3Fx2or/CF3NHdwcAvPFzNjQ6PafzT4sORWSQN6oaNNiezo+3orzSOpwqqIRELML8cT0dvRwC1mXLVNSp0JGY4HuGjdCwdVFDc01SP9xvcE3bO63dmSyLpPjYiPI6NbYdMzzgFk1mb+1hGAapOYbeXPEDQ2yyNqJtXkjoB38vKS4U13LevV0iFuHZCb0AGBRiVTtpx/bk16YqzeP7BCGI42athHVY2r8pObsIi7adhLlwEj5n2AgNc8ppa6yJ9zFWc+7Irbbs2yyrg6itwZksi6T42IhNh/PQoNEhppscd0Wxr7TZvDfXuN6Or9DpSvh5uePlaYZA53WpF1HMcdrofcPCESr3QHG1Cj9kFnI6tzUYq4LPGkJVwfkE2/5NbLK5xCLgwzn8zrARGvYsarjjeEGHn9uzH1ZFndppLIuk+NiAmkaNKYh10aTeEInYv2ml5BjMlxP6dqXeXA7gwdgIDI3wQ61KizUcd293dxPjqTsNVp8Ney9BpXGc1eecshoXimvhLhEjYRBZFvmGuU7sALtsLj0D+Hu723q5LoelRQ1TmsIXLIFPMTUGy2Km01gWSfGxAV8fzUdNoxZ9grsgwcLaGbvPGhQfcnM5BrFYhNdnGN7mvssowKWSGk7nnzu6OxS+HiisbMDW9I7f5myJsRnpxH5d4Usp7Lyko07sgHPFXAgRS4oafnn4qsVuKb5cX/aWxWGCsSyS4sMxDWqdqf3Bwom9LQpOvlpah/PFNZCIRZjSnxQfRxHbwx8JA0OgZ4D3/jjP6dweUgmWx/cFYMioqndAgledSovvmrINZ5Cby6FY2o+rOc4UcyFUjEUNzSGC5W4pttettEZlU3cXe8uicOIESfHhmG+PX0NZnRrh/p6YaeFDxZjNNaZXAORe9BbuSF5M7AexCPjjbDGyCio5nfv+2HD0DemCqgYtUgrt/ye4Yd8llNSo0D3ACwlkWXQY1vTjao7Q+yU5A2zjfaxxS7ENon7zt1yL7htL0OkZHL50k9VYIVkWSfHhELVWj88OGuqiPDuhN6QWdrg2urmmDqKihY6mT7AP7htmqJfxOcetJiRikSmI+mCRyK6d2/NK60wWyddnDKQ4MgdhTT+utnhkZHfB9ktyFhKjQ/Eky+KfligH5mr6NMfS+4YNRsV8wz52DZaFZFkkxYdDfjxZiBtVjQj2kVnUhR0AbtaokHGtAgDF9/CFp+6MBAAkZys5V04m9QvGqJ7+0DIirNtrv87t//41B2qdHhP6dkXcgGC7nZe4hTX9uFpzq19S2wH4QuiX5EzEsYzlDLLQHWSupo8RtvcNW8y1pmiOEC2LpPhwhEanx8cHDA+wp+/sZfGbdGpuMRgGGBIuR6jc0xZLJCxkQKgvxvQKgE7P4Ouj+ZzOLRKJ8OJUQ6zPj1k3kF1Yxen8bbHvXAn2nCuBVCLCP2cOtCjbkOCOzmbrmO+XFCWIfknOBFu31IrvTllV0PDQS5Px+vQBHY7jKsuLTTCzEaFaFknx4YgPUi8ir7QO/l5SzGmqAGwJf5w1xPckkJuLV/xlvMHqsz39GhrU3KafDwmXY1igHgwDvPzDac6rRTdHrdXjX7/mADA0I+3Nsm8cwT1KlvWh2nKLsOuX5LhsQVeFrVuquNo6l5RELEKQDztrEdv7qz3YBDMbEaplkRQfDkjPKzeVEf/3vTHwlrlZ9P2aRg3SLhn6Q02lmiq8Im5ACCICPFFZr8GPWdwXHbyvpx5yTzdkF1ab4sNswfeZ15FXWoegLjIstqCSOMEtydlFePPXs6zGthUzwafaLkRLjG6pEN/2FZTOuKTYxtC8+evZTsX6sI1DWjypj2AtizZRfAoLCzFv3jwEBgbCy8sLQ4cORUZGhulzhmGQlJSEsLAweHp6YuLEiTh7tqUwUKlUWLJkCYKCguDt7Y1Zs2bh+vXrtlhup6hq0GDZt1lgGOCB2HBMH2z5TXDkchnUOj0ig7zpTZxnSMQizB/bE4ChGree47RRuTvw2t2GQOcPUi/iQjG3dYMAgxv2oybF/LmJveHD07o9zi43jC6q8jpNh+M6ipngS20Xom0So0Px/kNDOxxjrXLK1p1WXmddjzAjbBWs8X2CBOXeag7nik9FRQXGjx8PqVSK33//HTk5OXj//ffh5+dnGvPuu+9izZo12LBhA44fPw6FQoH4+HjU1NwS+kuXLsXOnTuxY8cOHDp0CLW1tZgxYwZ0Osf3OGrOP3/KRmFlA7oHeCFp1iCr5jAGNY/pFUBxFzzkwRER6CJzw4XiWuzO4b4x4D1DQjG5fzDUOj3+/t0paDl2ef14shAF5Q0I6uKOOaMsd8PaA2eXG2zjJszFTLDtqUa91xxHaa2K1ThLlVNLWmUA1gc6O1NrivbgXPF55513EBERgU2bNmHUqFHo2bMnpkyZgt69ewMwvLWtW7cOr776KmbPno3o6Ghs2bIF9fX12LZtGwCgqqoKGzduxPvvv4+4uDgMGzYMW7duxZkzZ5Camsr1kq3m9zNF+CnrBiRiEdY+PBRdLHRxGcnMNyg+w7r7c7k8giPknlI80dS9/IM9Fzm3+ohEIqy6LwY+Hm44db0KH7JMH2WDTs/go/23gu493fmZvu7scoNt3ESAt3vHMRNsbz37tG8i2oCtxeRqab3FcydGh2Ltw0PNjjNalTYfzrNI+XG21hTtYd2TugN+/vlnTJ06FQ8++CAOHDiAbt26YeHChXj66acBAHl5eVAqlUhISDB9RyaTYcKECUhLS8OCBQuQkZEBjUbTYkxYWBiio6ORlpaGqVOn3nZelUoFleqWpl1dXQ0A0Gg00GjaNy0bP+toTJvf0+nx9u/nAADP3NkTg8O6WDwHANQ0ak0F8oZ287FqjtvWZuWe+Iyj9zR/TAQ2peUht6gav58p5KTwX/M9BXpJ8frd/fHiD9lYm3oB4X4yzBrSed/5z6eKTEH3D8eG2fz31/o6sT2fo+QGYB/ZUVJVB5nE/APotWl9MaVfULtzltbUs5qntKbeqmvt6L8zW2DvPQ0L90F3P3cU13Rs+fkhIx8L7uxhsQIxoU8AUvIAmdj8ffBucg6+SruCl6f1R9yAjmWWTs9g9W9n4d7B/SUWAf/3wJAO71FrsFZuWIuIYRhO3w08PAza7vLly/Hggw8iPT0dS5cuxaefforHH38caWlpGD9+PAoLCxEWdquy8TPPPIP8/Hz88ccf2LZtG/7yl7+0EEYAkJCQgMjISHz66ae3nTcpKQkrV6687fi2bdvg5eXF5RYBAIeLRfjvFQm6uDH453AdZFa+SGeWirDlogTBHgz+MVQH8nTxl9+uibG7UIxuXgz+Ptg212rnVTH2F4khETF4boAeUXLr/zyr1cC6bAnKVCJMj9AhIdz+ZoD6+nrMmTMHVVVV8PX1bXeco+QGYH/ZQRBEx7CVG9bCucVHr9djxIgRWLVqFQBg2LBhOHv2LD7++GM8/vjjpnGtY1kYhjEb39LRmFdeeQXLly83/VxdXY2IiAgkJCR0+IvTaDRISUlBfHw8pFJ2QZ8Nah3eWncIgArLpg7AfWOsj5tI3nEKQDHuG9kL0xOirJ6nOdbsie/wYU/j6jU4/P5BFNbr0CVqJCb07dqp+draU6KewfP/PY3ks8XYckWGb58ahagQywPey2pVmPflCZSp6hAq98Cbj4+1S1Bz6z0ZrSfmcJTcAOwjO3R6BlPXHURxdWO7lZZDfD3wx9K7OrQA7D6rxAv/O9WuK4LtPO3Bh78zrnHEnnadKcKL3582O+6x0T3wUlMVd7YY97PhghcKKlWsvZp+nlL83wNDMLIpNicjvwKltSrkl9XhfxnXzVqojLx7/2DcHcNtJpe1csNaOFd8QkNDMXBgywCsAQMG4PvvvwcAKBSGOjVKpRKhobd+eSUlJQgJCTGNUavVqKiogL+/f4sx48aNa/O8MpkMMtntAX1SqZTVzc52HAB8cfgaSmpUCPf3xLyxPSF1s87c06jR4cDFUgDA9CFhnP9RWrInoeDIPXWVG2o0ff5nHj4/lI+4Qdw0+Gy9p3WPDMO8L47hRH4Fnvo6ExvmDsdwC+K/ympVmL85E5du1kHh64HtT49BgI99LRfGPbG9Vo6SG4B9ZIcUwCvTB+G5rZkAWobgGNWTV6YPgofMvd05krOLsHjHaTAd5PWIWMzDBpIdnSNY7g2Vzrzi+UXaNYzoFWRVSvjyqQOwcNspAOxCuoprtXhscwb8mvpAVta3diexU5SD5d42+z1aKjeshfPg5vHjx+P8+ZYdrS9cuIAePXoAACIjI6FQKJCSkmL6XK1W48CBAybhFBsbC6lU2mJMUVERsrOzOxRg9qCqXoOPm1KDl8f3hcxKpQcADl64iXq1DmFyD8R0k3O1RMKGPHlHL0glIhzLK8fJpmw8rvGQSvD54yPQK8gbN6oaMfujNDzz1QlcKjGf6l5QXo+5XxzD+eIaBPvIsP2ZMegZ5G2TdXKJs8sNoP32A2yKwLHJChOLgA/nCK+YnDNiTD1ng7XZV3EDQli1s2hNZb2mDaXHPM6QzWWEc4vPsmXLMG7cOKxatQoPPfQQ0tPT8dlnn+Gzzz4DYDBVL126FKtWrUJUVBSioqKwatUqeHl5Yc6cOQAAuVyOJ598EitWrEBgYCACAgLwwgsvICYmBnFxcVwv2SI+PXgZ1Y1a9AvxwT1Du3VqruRsQ7XmqdEKSmMXCAq5B+4d2g3fZVzHx/sv47PHR9jkPP7e7tixYAzeSz6P7zOvY3dOMVJzi3H/8HAkDFJgQKgPuvl5QiQSQaPTY++5EmxPv4YDF26CYYCuTUpPpACUHsD55YaRxOhQxA9UID2vHCU1jQj2MTxIzLml2GSF6RnDfUM4HmPq+bNNFr6OMNb0Gds70OLzGO+nzYfz8OZvudYslRVCbU3RHpwrPiNHjsTOnTvxyiuv4F//+hciIyOxbt06zJ071zTmxRdfRENDAxYuXIiKigqMHj0au3fvho+Pj2nM2rVr4ebmhoceeggNDQ2YMmUKNm/eDInEcem4JdWN+PKwobP136f269QN0KjRmWrCTKM3NEGxYEIvfJdxHSm5xbhysxa9bFR0MtjHA+89OATP3NUL7/1xHrtzivFdxnV8l2EoyOcjc0M/hQ+uldejpJl//o4+QVh5zyBBFcN0ZrnRGolYZPFDjgoXCg9j1/aNh6+aHZuSo7RK8QEM99MT4yPxxaE8KKvajiHrLAq5B96YOdBprImcKz4AMGPGDMyYMaPdz0UiEZKSkpCUlNTuGA8PD6xfvx7r16+3wQqt4z97L6JRo0dsD39M6WRn673nSlCr0iJM7oERPah+j5DoE+yDuAHBSM0twReH8rDqvhibni8qxAefPT4CmdcqsPVoPnJuVOPyzVrUqLQ40VQDKqiLOx6IjcCjoyLQI1AYVp7WOJvc0OkZiy077cG2NgzbcYR9iBuoYKX4/JR1A69Ot96aYrQwPbc1EyJwW8bp9ekD8MT4SKew9BixieLjjFwtrcOOdEPzv5cS+3faNfVTU9+nWUO7QexEN5Sr8PSdvZCaW4L/ZVzH81OiEOJr+wfO8O7+piBntVaPvNI6nFNWw8vdDRP6doW7G7Xe4wvJ2UVY+UtOC/dUaCfemmN7+CPA2x3ldeo2PxfB8FbuDPEXzsSoyAAEeEvNtikpq1Pj6OUyjI8Ksvpcxhiy1vedtRjvKWdTegBqUsqaNSkXoNUzmNSva6eFS1W9BvvO3QQA3DOUm8wgwr6MigzAiB7+UGv1+Hg/d5WW2eLuJkY/hSHOLH5gCCk9PMLYk6v1w0dZZV1n7uTsIkx4b1+HSg/gPPEXzoRELMJ9LGNBF22zvr+WkcToUBx6aTK+eWo0/Dytz4xy9nuKpCULzt6ows+nbgAA/j7VspoLbZF8tghqnR79QnwwIJT74kyE7RGJRFgW3xcAsC39GpQcvGERwqej7CtrOnO3p0Q1h01WGOE44gYqWI2rbOhcc1EjErEI4/sE4e37YyAC2yT1ljj7PUWuLjMwDGNqTXHP0DAMDOu8ovLjSYMSNYusPYJmXO9AjOoZgPSr5fh4/yWsvCfa0UsiHIy57KvmnbnNBbOySWEP8JbiwN8nkcWPxxhT29kGHq/8JQfxAxWdtrS05/ry95KCQcs6PqFyDzwysjt6Bnl1Oh6tPbiMeesspPiYYeOhPPx5sRTuEjGWN73hd4aiqgYczSsDAMwaQoqPkBGJRFgaF4U5XxzD9vQCPDexj8U1NQjngsvsKzYp7OV1GmTkV1idEUTYnuaBx+awRDFmQ3vlEwDYVQnhOuats9BrQgecuFqO1U3WntdnDOAkW+a/x6+DYQxvAREB1AdI6IztHYhRkQFQ6/T45ID9Y30IfsFl9hWlsDsPRusL27gbLq+psXzCPUO7YWzvQEjEojaP2QquY964gBSfdiitVWHxtpPQ6RnMGhKGeWN6dHpOnZ7Bt8evAQDmjLK+vxfBH0QiEf422dBjbXv6NXoIuThGt0Z7jxFLqt9SCrtzkRgdig/nDmc1Nsj79hYqQoTrmDeuIMWnDXR6Bkt3ZEFZ3YjeXb2xenYMJ5WVD164iRtVjZB7SpEYzS7gjeA/4/sEYlh3P6i0enzxZ56jl2NzfjtdhNScYlQ3Wl723tkxujWA24NKLc2UGRUZAEUHZRKcqYWAqzCmV2CHirGRFd+dcoglhGvYxrxl5Num/U97kOLTBv/ZcxGHLpXCUyrBx/Ni4S3jJhRqe7rB2nP/8HB4SPlTSZboHM2tPluP5rebduwsvPvHOTz11Qlk2llY8ZX0vHL8lFWII5fLoNMznerJ1ZyUHCUatbo2P3P2dGNnpSPFuDnF1Y5zA3EJWwt4aS27zvBcQcHNrTh44Sb+s/ciAOCt+6LRN8THzDfYUVzdiD3nSgAAj46K4GROgj9M7NcVMd3kOFNYhY2HrnBS9oCP3KxRIb+sHiIRMMyCjvHOSGquoeXMX7ccN3Xibh6waU1PLiPGuIj2HAB+XlKsnh3jtOnGzoxRMU76+SyU1W0/8BkYFCOuMrwcxdXSOlbjgrrIUGrjtTSHLD7NKKpqwNJvs8AwwKOjumP28HDO5v7uRAF0egYje/ojiiNliuAPIpEIiyf3AQBsSctHjZO6gYwm6b7BPpB3okCa0Nl1ughLv8267XjzgE1rA0jZpLHL3MSIZ1kfhuAfidGheP+hoR2OaZ7hJUR0esbU27IjQuUeiLVz2yZSfJrQ6PRY9E0myuvUGBTmazJHcoFOz2B7U7uLR0ZSULOzEj8gBL27eqNWpcX3TY1EnY0TVw1COLan61p7dp2+gcXb205N5iJgk00au7JaJdgHImGArXtHqAkTG/ZeRFWD1uy4R0Z2t7tFixQfAHoGWPnrOWReq4SPhxs+mjuc0xicvedKUFjZAD8vKaYPJtO0syIWizB/XE8AwFdH8qG3c6aCPTh82VCDarSLBtQmZxdh4baT6OjSdvZNndLYXQNnztrT6RlsYtGcFQB6Btm/rIvLKz56PYP/XhHj2xPXIRIB//fgEM67W3915CoA4OERERTU7OTMHh6OLjI3XCmtw6FL9vRa256bNSrkFlUDAMb3sb6ZolAxuqDYYq1iEtSFXSqzEB+IxC3MlT4AALEIqBBgskR6XjkqG9i5+x1xH7u84lOn1uJqrQhiEfDeA0MwdRC3fvMrN2vx58VSiETgpBYQwW+6yNzwQKwhNmxL2lXHLoZjDl0yNNYdEOrL+uHsTLBxQTXHGoGenF2EFf/N6nAMpbE7B80zvNpDz3DTvNTesFX6/bykDrmPXV7x8fGQYuEAHT56dKjpgcUlW48aUtgn9QumSs0uwuNjDQru3vMluFZW7+DVcEdqjiErcUr/YAevxDFYYsGxRjExZnK1l+kDUBq7s5EYHYoP5wyDuUvpiCJ/nYGt0v+XcZEOuY9dXvEBAF93YMoA7oV5vVqL7zIMQc2PjSVrj6vQq2sX3NW3KxgG2Hos39HL4QSVVocDFwwWn7iBIQ5ejWOwxIJjqWKi0zNI+rnjTC7A+btmuyL+3jKbxow5goo684Hbfl5SUyasvSHFx4b8kFmImkYtegR6YUJUV0cvh7Aj80Ybsvd+yLwOjU7v4NV0nqNXylGr0iLYR4bB3eSOXo5DYBuT8dEcyxWTDXsvQllt3qL0fw8MIaXHyXC2YHadnsGbv+WaHbfq3hiHWS1J8bERdSotPthjKIT4xLieEJNZ2qWY1D8YQV3cUVqrxr6mwpVCJjXHUKxvyoAQl72X2VTd3fDoMNxtYeZmcnYR1qZeZDW2lMWbNCEs2FoSr5YKw23ONhbO39vdDqtpG1J8bMSnB6/gZo0KPQK9MHc0ublcDalEbCqA+Z0T1PTZf8GgvMXZwCUsJNprRxEq98An84bj7sFhFs1naaYYZXI5H2wsiQCwLvWCIIKchWDBIsXHBhRXN+Kzg5cBAC8l9oe7G/2aXZEHm4Ll954rEYyZui0KyutRUN4AN7EIo3sFOno5DicxOhSHXpqML+ePBAB8OX8kDr002SoXlCWZYpTJ5ZwYLYlsQpeFEOQshPpE9ES2ARsP5aFRo8fw7n6YRl3YXZaoEB8M6+4HnZ7BjycLHb0cqznSVLRwSIQfunDUsFfoSMQikxJiSQ+u1liiEFMml/OSGB2KZXFRHY5xVCdzS2ET2OxoJZ4UH46padRg+zFDCvuiSX0gEpGgcmUejDU0pP0+oxAMw+83tfZIu2woxDiuN1l7uIbtW++yuL4U1Ozk9AxiVziXzzGDOj2Df/yYbXbc69Mdq8ST4sMx3x4vQI1Ki15dvTGpn2vHQxDA9MGhcHcT43xxDc7eqHb0cixGr2eQ1mTxGUuKD+dU1KnM1nBR+MoclvZL2A+2SvDXPC6RsWHvRVTWm6/Y7MjAZoAUH07R6vSm/iRP3dHLZbNfiFvIPaVIaKp78z8BBjkfzStDSY0KPh5uGN7ddRuT2oLk7CIsMtP3SwQgadYgcnG5AMYgZ3MY7wS+xfpY0p/L0TGPpPhwSPJZJQorGxDg7Y7Zw7s5ejkET7i/Kcj551M3oNYKq6bP9xmG2KQZg8OozxyHGLO5Onp0iUXAh1bUBCKECZsWFgBM9wzfYn343p+rOaT4cMjGQ3kADD256CFBGLmzTxCCfWQor1Njd47S0cthjVqrxx9nDeu9nxR5TmGTzaVnHO8SIOxLYnQonhzfk9XY0lp+1XTie3+u5pDiwxGnCipx8lolpBIRHqNmpEQz3CRiPDLKUMn56yP89c+3Jj3PUK25q4+M3FwcI4RaJ4RjiBvILhM4n2d9APnen6s5pPhwhLET94zBYejq43qdq4mOeXRUBCRiEY7lleNicY2jl8OKPecM1Zon9etK8WocI4RaJ4RjGBUZAIWv+WfI95nXeRXnY1h3x/erI/tzNYcUHw64WaPCr6cNFTXnj+vp2MUQvCRU7mnqav7t8QIHr8Y8DMNgb1Pa7OT+rtmU1JbE9vBHQAduLBEcX+uEcAwSsQiPNlmIO0JZza/GpSk5SjRqdR2OeXu24/pzNYcUHw7Ynn4Nap0eQyP8MDTCz9HLIXiKMch515ki6Hn0ptYWV0rrkF9WD3eJGHdEBTl6OU5FcnYRJry3D+V16jY/Nz4WqGCh68K2pg9fXKHJ2UV4bmtmu6ns/l5SfDKPP4H6Nld8Vq9eDZFIhKVLl5qOMQyDpKQkhIWFwdPTExMnTsTZs2dbfE+lUmHJkiUICgqCt7c3Zs2ahevX+ZcOrNHp8U1TXYUnyNpDdMCEvl3h7S7BjapGnCzgV0ZGa/bmGqw9o3sFOKRas7PKDeMDoqPAZoXcAx/z6CFB2B8huULZZCjK3MSIZxm7ZA9sqvgcP34cn332GQYPHtzi+Lvvvos1a9Zgw4YNOH78OBQKBeLj41FTcyv2YenSpdi5cyd27NiBQ4cOoba2FjNmzIBO17Epzd4kZytRXK1CUBcZ7o4hQUW0j4dUgvimmj5G1yhfMcb3TO5v/yKczio32DwgArylOPD3SaT0uDhsGpf6e0kR28PxSQdsMhSV1SpeueVspvjU1tZi7ty5+Pzzz+Hvf+viMAyDdevW4dVXX8Xs2bMRHR2NLVu2oL6+Htu2bQMAVFVVYePGjXj//fcRFxeHYcOGYevWrThz5gxSU1NttWSLYRgGXx42pLDPHd2dmpESZpnR1L2bz+6uOpUWJ64aLFL2rj7uzHKDzQOivE7Du/oshP1pXtOnPeWnol6DCe/tc3jHdiFmKNrMhr1o0SJMnz4dcXFx+Pe//206npeXB6VSiYSEBNMxmUyGCRMmIC0tDQsWLEBGRgY0Gk2LMWFhYYiOjkZaWhqmTp162/lUKhVUqlt1DaqrDe0BNBoNNJr2iyoZP+toTHscuHATJ69Vwt1NjIdiw6yawxZ0Zk98xVn2NCbS0OizuFqFY1cMPbD4tqcjl25Cq2cQ7ueBbnJ3i9bX+jpZujd7yw3AfrJDWVkHmcS8sltSVQeNxpfVnFzjLH9nzRHqnqb0C8JHc4bg7d/PQVl9S2mQiRnTfytqG7B0ewbWPjwUcQMck4QQ5OXG6r4O8nJr9xp0Vm5Yik0Unx07diAzMxPHjx+/7TOl0lAQLSSk5UUKCQlBfn6+aYy7u3uLNz7jGOP3W7N69WqsXLnytuO7d++Gl5eX2TWnpKSYHdMcPQP832kJABHGd9XixJ97LPq+PbB0T0LAGfY0wFeM4zfF+PyPDDwQyb89/XhVDECMcPd67Nq1y6o5jHuqr2dfa8QRcgOwn+wQA3h3FIuBBSexq+AkqzltBd/uSS4Q6p6W92/7+JsjblWBV+dlYFeenRbUBmzu69Lco9iV2/EYa+SGNXCu+BQUFOD555/H7t274eHRfuBV667lDMOY7WTe0ZhXXnkFy5cvN/1cXV2NiIgIJCQkwNe3/bcnjUaDlJQUxMfHQyqVdnj+5vx2RonCo6fhLZPg7fkTO0xNtTfW7onPONOevC7cxPGvTyKnxgM6fT0Sp/JrT598eARADR6aMAR3D7Ys1qT1dTJaT8zhKLkB2F52pOYWY+m3WR2uETC4NEJ8PfDH0rscls3lTH9nRoS+p/S8cvx1y62XAZmYwZsj9Hj9hBgq/a375Mv5I+1e/iA1txjLvs3qMG5NBJi1SFkrN6yFc8UnIyMDJSUliI2NNR3T6XQ4ePAgNmzYgPPnzwMwvJ2Fht4SqiUlJaa3OYVCAbVajYqKihZvbyUlJRg3blyb55XJZJDJbi/6JJVKWd3sbMcBhkyuD/ZeBgA8c2dvhPixSz20N5bsSSg4w54m9FMgqIs7SmvVOF0hwkwe7am8To1cpSFY+M6+IVavy3id2H7fUXIDsK3s0OkZvPJjDlS6jhUZ46evTB8ED5njX6Kc4e+sNULdU2m9ts37R6UXtTheWq+16/50egb/+u08Gju4t8UiYMOjwzGN5QuUpXLDWjiPxp0yZQrOnDmDrKws078RI0Zg7ty5yMrKQq9evaBQKFqYHdVqNQ4cOGASTrGxsZBKpS3GFBUVITs7u0MBZi9+yrqBvNI6BHq748k7Ix29HEJguLuJTQXKDhbxKyD+0CVD3FF/hY9dK5A7q9w4eqWs3domzfH3dqcUdqJN+JraLuR+c5xbfHx8fBAdHd3imLe3NwIDA03Hly5dilWrViEqKgpRUVFYtWoVvLy8MGfOHACAXC7Hk08+iRUrViAwMBABAQF44YUXEBMTg7i4OK6XbDEHL9wEYMjkckSNE0L4zB3dAx/vv4wrNUBOUTWGdA909JIAwJQhMmWAfbO5nFVuHLlcxmrcIyMjSOkh2sSY2q6samzXpSQWARXtFMS0FULM5jLikKf2iy++iIaGBixcuBAVFRUYPXo0du/eDR8fH9OYtWvXws3NDQ899BAaGhowZcoUbN68GRKJY7ueV9arkZprqHEytjdVtCWsQyH3wNSBIfgtW4mvjxbwQvGpV2ux75xBqZ/Gw4ewEOXGpRJ2fdmoQDPRHsbU9ue2ZrY7Rs8Ai7Zl4mOx/ayGfLVEscEuis/+/ftb/CwSiZCUlISkpKR2v+Ph4YH169dj/fr1tl2chXx9JB/1ah0GhvpiTC/qo0NYz2NjIvBbthI/ny7CP6YPdHiA/IHzN9Gg0SEiwBODwhyTTt0cocuNXadvIPlsMauxY3vRSxTRPonRofhwzjAs3t5xtt/KX3IQP1Bhl+D4ijoVxCKD0tUWIhhe8PjYb45fAQY8p1alxaamLuwLJvQym01CEB0xvLsfwr0ZqLV67Dh+zdHLwa5sQ8r33dGhdG93kuTsIizcxi4lvYvMDWN6O97iR/Abf29Zu0oGADAAiqrs07g0ObsIi7ad7HA9AH/7zZHiYwEb/8xDeZ0akUHemE7tKYhOIhKJcJfCUIvj6yP50Oj0Zr5hOxo1OuxtcuFOo3u7UxhbU7DloRHhvHw4EPyCbaxMSk77Nau4gE3rFbEI+HAOf4P1SfFhSVmtCp//eQUAsDy+L9wk9KsjOk9sEIOgLu4oqmrErjOOKz1/9EoZ6tQ6hMk9MCRc7rB1OANssl2aw6fmjQR/YRsr8+XhqzZtYyHkbC4j9PRmyTvJ51Cr0mJgqC9ZewjOcBMD80YbUts///MKGMYx/btOXqsEAIzpFUhurk6SasEbdyhPYyAI/mHM7mLDyl9yoLNRL0AhZ3MZIcWHBSeuluO/J64DAN68dxDEZJYmOOTRkeHwkIqRXViNo1cc08H41PVKAMDQ7n4OOb+zoNMz+OFkIevxfI2BIPhH88al5rBlrE9QF3b1vdiOcwSk+JhBr2fw2o/ZAICHR0Qgtge9nRHcEuDtjtnDwwEA350osPv5GYbBqYJKAMCQcD+7n9+Z2LD3IipYFCwUi4CPeBwDQfCTxOhQPD66B6uxNov1YWtIcozxmhWk+JjhwIWbOKesgY/MDS9Na6dbHEF0kllDwgAA+y/ctJmJuj0yr1Wgol4DT6kEA0Idn8YuVJKzi7A29SKrsY+P7WFxHzSCAICJ/dkVF/0p64ZNZMnec+xKNJTWqTg/N1eQ4mOGLw8bWt4+MirC4XVWCOcltoc/fDzcUF6nRlaT9cVe/C/D4Ma9OyYU7m4kEqzB0kyuqYNI6SGsI7aHv/lBAMrq1Jy7u5Kzi7Dx8FVWY/lYuNAISbkOOK+swZ8XSyEWAY+P7eno5RBOjFQixoS+XQEAKTns3qi4oEGtw6+nDBkgD8SG2+28zoYlmVwU0Ex0BktiwrgMMGar3IvA/3ucFJ8O+HDfJQBAYrQCEQFeDl4N4ewkRhvSmnedKbJbdtfuHCVqVFqE+3tiNI8FFd+xJJOLApoJe3G1tJ6zudgq9wz4f4+T4tMOV27W4tfTNwAACyf2cfBqCFdgcv9geEjFuFZej+zCaruc88B5Q2+umUPCKFvRSnR6Bjuz2GVyLYvrSwHNBCcofD1g7i92XeoFzmr6sLUe/XV8T97f46T4tMOH+y5DzwBT+gcjuhsVdCNsj5e7G6b0DwEA/GaHYoYMw+DIFUP38Dv6UK8oa8nIr0B5nflMrgAvKRZPppcoghtentafVeIUVzV92MbsCKEgJyk+bXC1tA4/Nr3BLZkS5eDVEK7E3U3FMe3h7rpWXo+iqkZIJSIM784uYJK4nf3nSliNu3dYN16b/wlhETcgBMviOn4+cdm/q4JFlhbfY3uMkOLTBhv2XYJOz2BSv64YGuHn6OUQLsSk/l3hLjG4u/LLuPPPt8WRywZrz7AIf3i6S2x6Lmfmq2P5rMYJ4U2YEBY9g7xZjetskLNOz+AfTfXsOuL16fyO7TFCik8rrpbWYWdT5dXn4/o6eDWEq+Hl7obBTb2yjl+1bRVno5trTC/+v6HxEUvcB0J5EyaEBVv3U2dTyzfsvYhKFoU5+dyfqzmk+LTiQ7L2EA5mRE/DA9KWio9aq8f+psDm8RTfYxWfHrjEeizfs1wIYWLs39XRneXnJe2U0q3TM9jEsnYPn/tzNYcUn2Y0t/ZQbA/hKEZFGuJtjl+tsNk5Dl8uRVWDBkFdZCZFi2BPcnYRPjpwhdXYadEK3me5EMLE2L+rI9tjZb2mU+0r0vPKUdlg3toD8LtoYXNI8WnGmpQL0OoZTOjblYI9CYcR2yMAIhGQV1pnszeon5oU/LtjFGSJsBCdnkHSz+yrNPfuyi4OgyCsIX6gAn5e0nY/F6FzmV1sZVBnLUv2hBSfJk4WVOLnU4a6PX+f2s/BqyFcGbmnFP1CfADAJt3aaxo1SD5reAO8b1g3zud3djbsvQhlNXuFdGwvciUStiM9r7zD+JvOZnZdLa1jNe4v4yIF8xJFig+AskZg4bYsAMC9Q8Oobg/hcCY1NSLcfZb7Dsu/n1GiUaNHr67eFMdmIZY0IgUMb8FjegfacEWEq8PWImON9VinZ7A9/ZrZcX4Cq1Hl8opPVYMGn56ToLRWjQGhvvj3fTGOXhJBYOogQ+rzvnMlaNToOJ3bGMd2//BwiETCeEPjA5Y2IgWAt2fHCOYtmBAmtszsSs8rh7LafP0eIVl7AFJ84OEmRpgXA4WvDJueGIkuMjdHL4kgMLibHKFyD9SpdTh8qZSzeevVWpzIN5i8ZwymgFtLsKQRqQjAR3OGU1AzYXPYZHYpfGVWxd+wtRL1DBJWL0uXV3xkUgkej9LjuwWjoZALIyKdcH7EYpHJ6pOczZ27KyO/Ahodg25+nuhOjXctwhJXwYdzhuFuUiwJO2DM7ALQrvLTqNVbldllrzpB9sblFR8AEIsMDd8Igk8YFZ/U3GJodXpO5jRWax7dK4DcXBbCVrgvi+uLuweH2Xg1BHGLxOhQfDxvOOTtZHdV1Wvw3NZMixuWVtSp0JEHSwRhFuckxYcgeMrInv7w95Kiol6DdI6KGRqrNY/tRQG3lsLWpSCkIE/CeYgfqICHW9utZ4yJ7JaktSdnF2HRtpMwN1yIxTlJ8SEInuImESN+oKFb++9nOu/uqlVpcfp6FQBgDCk+FtORS0HU9C9p1iDBPQQI58AQiNy+O9aStHZjIH9HOo9YBHwo0Dg2UnwIgscYu7X/nl3UaXdXel4ZdHoG4f6eiKD4HqswuhRaxwMq5B74eJ4wHwKEc8BlWjubQH49I5zeXK2hFCaC4DHj+wQhwNsdpbVqHLlShjujulo9l9FqNLGf9XMQBuUnfqACRy+VoDT3KL6cPxJj+gSTpYdwKFwGItuyNhAfIIsPQfAYqUSMadGGIOefs25YPY9KqzNVa55JgbedRiIWmQI6R0UGkNJDOBw2MWhiEVBRpzY7l7NmcxkhxYcgeM6sIQZFJfmsEiqtdcUMD14oRU2jFiG+MoykpqQE4XQ0j0FrDz0DLNpmPrvLnBIl1GwuI6T4EATPGdkzAApfD9Q0anHg/E2r5vj1tMFaND0mDGKyThCEU5IYHYoP5wzrMAUdMJ/dJRGL8Pr0tru+G6cWYjaXEc4Vn9WrV2PkyJHw8fFBcHAw7r33Xpw/f77FGIZhkJSUhLCwMHh6emLixIk4e/ZsizEqlQpLlixBUFAQvL29MWvWLFy/fp3r5RIE7xGLRaYqy8ZGupbQoNYhJacYADBzCD+Db0luEAQ3+HvLOkxBZ5PdlZxdhDd/a7s9izME8nOu+Bw4cACLFi3C0aNHkZKSAq1Wi4SEBNTV3erw+u6772LNmjXYsGEDjh8/DoVCgfj4eNTU1JjGLF26FDt37sSOHTtw6NAh1NbWYsaMGdDpuO1bRBBCYNZQg7srNbcYdSqtRd/dd74E9Wodwv09eduUlOQGQXAD24Dj9io5J2cX4bmtme1mdb0+fYCglR7ABlldycnJLX7etGkTgoODkZGRgbvuugsMw2DdunV49dVXMXv2bADAli1bEBISgm3btmHBggWoqqrCxo0b8fXXXyMuLg4AsHXrVkRERCA1NRVTp07letkEwWtiuskRGeSNvNI6pOQU495h3Vh/95cmK9GMwWG8rdZMcoMguIFtwPGXh69iVGRACyVGp2eQ9HP79XtEAN78LRdTo0MF6+YC7JDOXlVlKJgWEGAIgsrLy4NSqURCQoJpjEwmw4QJE5CWloYFCxYgIyMDGo2mxZiwsDBER0cjLS2tTQGmUqmgUt3qIltdXQ0A0Gg00Gg07a7P+FlHY4QG7UkYWLqnGTEhWL/vCnaevI7p0cGsvlNWq8KecyUAgMSBXW3++2u9J2vPZy+5AZDsaA7tif+Y28+wcB/08Jd1WMzQyBs/nsbEqECTEvPx/kuoqGuArO0C0ACA8toGHL1UwmlgM1dygy02VXwYhsHy5ctxxx13IDo6GgCgVBrMayEhIS3GhoSEID8/3zTG3d0d/v7+t40xfr81q1evxsqVK287vnv3bnh5mS/WlpKSYn5DAoP2JAzY7smnAQDc8OeFm/hm5y74y8x/Z9c1MdRaMSK8GVw9eQj5WZ1ZKXuMe6qvr7f4u/aUGwDJjragPfGfjvazvD/bWXT4I/l30089ALw7yvy3SnOPYlcu23OwpzNywxJsqvgsXrwYp0+fxqFDh277rLXJnWEYs2b4jsa88sorWL58uenn6upqREREICEhAb6+vu3OqdFokJKSgvj4eEilbTd4Exq0J2FgzZ72VB3HsbwKXHbvhX/e3bF0q1Np8c/3DwLQ4u8zhpjqAdmS1nsyWk8swZ5yAyDZ0RzaE/9hu593fz+Hr47lm51P7uGGfS9MwrQP/kQxy/igL+eP5Nzi01m5YQk2U3yWLFmCn3/+GQcPHkR4eLjpuEJhEL5KpRKhobd8iyUlJaa3OYVCAbVajYqKihZvbyUlJRg3blyb55PJZJDJbn8FlkqlrG52tuOEBO1JGFiypyWT++LYxmP474nrWDIlqkN//lcHr6KqQYvIIG9MHxJuV5+8cU+WXit7yw2AZEdb0J74j7n9TB4Uhs/Trpmdp6ROhye/zsS1ShVu70J3O6FyD5tVKrdWblgK51ldDMNg8eLF+OGHH7B3715ERka2+DwyMhIKhaKFmU6tVuPAgQMm4RQbGwupVNpiTFFREbKzszsUYATh7IzvE4ihEX5QafV4bWc2GKbtMMTswir8Z89FAMDSuCjeByKS3CAIbhkVGQA/T3YKxNEr5huXGhFy/R4jnCs+ixYtwtatW7Ft2zb4+PhAqVRCqVSioaEBgMFUvXTpUqxatQo7d+5EdnY2nnjiCXh5eWHOnDkAALlcjieffBIrVqzAnj17cPLkScybNw8xMTGmbA2CcEVEIhH+fW80pBIRducUY3t6wW1jGjU6LPs2C1o9g8RBClPlZz5DcoMguEUiFuEv43tyOueyuL6CT2UHbODq+vjjjwEAEydObHF806ZNeOKJJwAAL774IhoaGrBw4UJUVFRg9OjR2L17N3x8fEzj165dCzc3Nzz00ENoaGjAlClTsHnzZkgkHYSbE4QLEN1Njhen9sdbu3KR9PNZlNQ04rmJvSFzkyDzWgX+/WsOLpbUIqiLDKtmx/A2hb05JDcIgnsWT47CprSrqKzvfJaUwleGxZP7cLAqx8O54tOe6b05IpEISUlJSEpKaneMh4cH1q9fj/Xr13O4OoJwDp68IxKnrlfi19NFWJd6ET+fuoG+wT6mRqQeUjHWPDQEAd7uDl4pO0huEAT3SMQivD07Bs9uzez0XEmzBgnexWWEenURhAARi0VY/+gwbJgzDF19ZLhysw7JZ5UQiYCHRoRj/wuTcFffro5eJkEQDiYxOhTL4qI6NYezuLiM2LyAIUEQtkEkEmHG4DDcGdUVH6ReRHFNIxZP6oMBoe2nYBME4XosnhyF7ekFrIoatsaZXFxGSPEhCIEj95TinzMHOnoZBEHwFIlYhKRZA/Hc1sx221G0hQjO5eIyQq4ugiAIgnByEqND8fG84VD4sij5DkO9HqF3YW8PsvgQBEEQhAuQGB2K+IEKbNh7CWtTL7Q7bllcFBZP5n/9L2shxYcgCIIgXASJWITn46LQT9EFK3/JQVHVrbifULkH3pg50CmtPM0hxYcgCIIgXAyj9Sc9rxwlNY0I9vHAqMgAp7XyNIcUH4IgCIJwQSRiEcb2DnT0MuwOBTcTBEEQBOEyOK3Fx1gJ1lx7e41Gg/r6elRXVztN517akzBwhT0Z//7YVGbmCyQ7aE98xtn2A9hfbjit4lNTUwMAiIiIcPBKCIKoqamBXC539DJYQbKDIPiBreSGiBHSq5gF6PV63LhxAz4+Ph02aayurkZERAQKCgrg6+scFW9pT8LAFfbEMAxqamoQFhYGsVgYnnWSHbQnPuNs+wHsLzec1uIjFosRHh7Oeryvr6/T3ERGaE/CwNn3JBRLjxGSHbQnIeBs+wHsJzeE8QpGEARBEATBAaT4EARBEAThMri84iOTyfDGG29AJmPXv0QI0J6EAe1J2DjjXmlP/MfZ9gPYf09OG9xMEARBEATRGpe3+BAEQRAE4TqQ4kMQBEEQhMtAig9BEARBEC4DKT4EQRAEQbgMLq/4fPTRR4iMjISHhwdiY2Px559/OnpJbbJ69WqMHDkSPj4+CA4Oxr333ovz58+3GPPEE09AJBK1+DdmzJgWY1QqFZYsWYKgoCB4e3tj1qxZuH79uj23YiIpKem29SoUCtPnDMMgKSkJYWFh8PT0xMSJE3H27NkWc/BpPwDQs2fP2/YkEomwaNEiAPy/RgcPHsTMmTMRFhYGkUiEH3/8scXnXF2TiooKPPbYY5DL5ZDL5XjsscdQWVlp491xB8kNkhtcInS5AQhMdjAuzI4dOxipVMp8/vnnTE5ODvP8888z3t7eTH5+vqOXdhtTp05lNm3axGRnZzNZWVnM9OnTme7duzO1tbWmMfPnz2cSExOZoqIi07+ysrIW8zz77LNMt27dmJSUFCYzM5OZNGkSM2TIEEar1dp7S8wbb7zBDBo0qMV6S0pKTJ+//fbbjI+PD/P9998zZ86cYR5++GEmNDSUqa6u5uV+GIZhSkpKWuwnJSWFAcDs27ePYRj+X6Ndu3Yxr776KvP9998zAJidO3e2+Jyra5KYmMhER0czaWlpTFpaGhMdHc3MmDHD5vvjApIbJDe4Ruhyg2GEJTtcWvEZNWoU8+yzz7Y41r9/f+bll1920IrYU1JSwgBgDhw4YDo2f/585p577mn3O5WVlYxUKmV27NhhOlZYWMiIxWImOTnZlsttkzfeeIMZMmRIm5/p9XpGoVAwb7/9tulYY2MjI5fLmU8++YRhGP7tpy2ef/55pnfv3oxer2cYRljXqLXw4uqa5OTkMACYo0ePmsYcOXKEAcCcO3fOxrvqPCQ3SG7YGiHLDYbhv+xwWVeXWq1GRkYGEhISWhxPSEhAWlqag1bFnqqqKgBAQEBAi+P79+9HcHAw+vbti6effholJSWmzzIyMqDRaFrsOSwsDNHR0Q7b88WLFxEWFobIyEg88sgjuHLlCgAgLy8PSqWyxVplMhkmTJhgWisf99MctVqNrVu34q9//WuLZpdCu0ZGuLomR44cgVwux+jRo01jxowZA7lc7vA9moPkhgFH35MkN/h/jZrDN9nhsopPaWkpdDodQkJCWhwPCQmBUql00KrYwTAMli9fjjvuuAPR0dGm49OmTcM333yDvXv34v3338fx48cxefJkqFQqAIBSqYS7uzv8/f1bzOeoPY8ePRpfffUV/vjjD3z++edQKpUYN24cysrKTOvp6PrwbT+t+fHHH1FZWYknnnjCdExo16g5XF0TpVKJ4ODg2+YPDg52+B7NQXLjFiQ3bIOzyQ2Af7LDabuzs6W5Rg0YhEPrY3xj8eLFOH36NA4dOtTi+MMPP2z6/+joaIwYMQI9evTAb7/9htmzZ7c7n6P2PG3aNNP/x8TEYOzYsejduze2bNliCtyz5vrw5Rpu3LgR06ZNQ1hYmOmY0K5RW3BxTdoaz6c9moPkBskNW+GscgPgj+xwWYtPUFAQJBLJbVpiSUnJbVopn1iyZAl+/vln7Nu3D+Hh4R2ODQ0NRY8ePXDx4kUAgEKhgFqtRkVFRYtxfNmzt7c3YmJicPHiRVOWRkfXh8/7yc/PR2pqKp566qkOxwnpGnF1TRQKBYqLi2+b/+bNmw7fozlIbtyCL3smucHvPQH8kx0uq/i4u7sjNjYWKSkpLY6npKRg3LhxDlpV+zAMg8WLF+OHH37A3r17ERkZafY7ZWVlKCgoQGhoKAAgNjYWUqm0xZ6LioqQnZ3Niz2rVCrk5uYiNDQUkZGRUCgULdaqVqtx4MAB01r5vJ9NmzYhODgY06dP73CckK4RV9dk7NixqKqqQnp6umnMsWPHUFVV5fA9moPkhgG+3JMAyQ2A33sCeCg7WIdBOyHGtNSNGzcyOTk5zNKlSxlvb2/m6tWrjl7abTz33HOMXC5n9u/f3yKlsb6+nmEYhqmpqWFWrFjBpKWlMXl5ecy+ffuYsWPHMt26dbstXTA8PJxJTU1lMjMzmcmTJzssjXPFihXM/v37mStXrjBHjx5lZsyYwfj4+Jh+/2+//TYjl8uZH374gTlz5gzz6KOPtpn+yJf9GNHpdEz37t2Zl156qcVxIVyjmpoa5uTJk8zJkycZAMyaNWuYkydPmlK1ubomiYmJzODBg5kjR44wR44cYWJiYgSXzk5yg+QGlwhZbhjXKRTZ4dKKD8MwzIcffsj06NGDcXd3Z4YPH94izZNPAGjz36ZNmxiGYZj6+nomISGB6dq1KyOVSpnu3bsz8+fPZ65du9ZinoaGBmbx4sVMQEAA4+npycyYMeO2MfbCWMdBKpUyYWFhzOzZs5mzZ8+aPtfr9cwbb7zBKBQKRiaTMXfddRdz5syZFnPwaT9G/vjjDwYAc/78+RbHhXCN9u3b1+Z9Nn/+fIZhuLsmZWVlzNy5cxkfHx/Gx8eHmTt3LlNRUWGXPXIByQ2SG1wjZLnBMMKSHSKGYRj29iGCIAiCIAjh4rIxPgRBEARBuB6k+BAEQRAE4TKQ4kMQBEEQhMtAig9BEARBEC4DKT4EQRAEQbgMpPgQBEEQBOEykOJDEARBEITLQIoPQRAEQRAuAyk+BEEQBEG4DKT4EARBEAThMpDiQxAEQRCEy0CKD0EQBEEQLsP/A4lCosnFABoYAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, (ax1,ax2) = plt.subplots(1,2)\n", "\n", "gdf.plot(ax=ax1, aspect='equal')\n", "ax1.grid()\n", "\n", "gdf_xy.plot(ax=ax2, aspect='equal')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting the Coordinates to list of X and Y coordinates in separate cells\n", "\n", "The coordinates of LineStrings in a GeoDataFrame can also be extracted and are stored as lists in respective X and Y columns using ``extract_xy_linestring(..)``." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.554510Z", "start_time": "2020-12-29T14:35:58.524503Z" } }, "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", "
idformationgeometryXY
0NoneSand1LINESTRING (0.25633 264.86215, 10.59347 276.73...[0.256327195431048, 10.59346813871597, 17.1349...[264.86214748436396, 276.73370778641777, 289.0...
1NoneTonLINESTRING (0.18819 495.78721, 8.84067 504.141...[0.1881868620686138, 8.840672956663411, 41.092...[495.787213546976, 504.1418419288791, 546.4230...
2NoneTonLINESTRING (970.67663 833.05262, 959.37243 800...[970.6766251230017, 959.3724321757514, 941.291...[833.052616499831, 800.0232029873156, 754.8012...
\n", "
" ], "text/plain": [ " id formation geometry \\\n", "0 None Sand1 LINESTRING (0.25633 264.86215, 10.59347 276.73... \n", "1 None Ton LINESTRING (0.18819 495.78721, 8.84067 504.141... \n", "2 None Ton LINESTRING (970.67663 833.05262, 959.37243 800... \n", "\n", " X \\\n", "0 [0.256327195431048, 10.59346813871597, 17.1349... \n", "1 [0.1881868620686138, 8.840672956663411, 41.092... \n", "2 [970.6766251230017, 959.3724321757514, 941.291... \n", "\n", " Y \n", "0 [264.86214748436396, 276.73370778641777, 289.0... \n", "1 [495.787213546976, 504.1418419288791, 546.4230... \n", "2 [833.052616499831, 800.0232029873156, 754.8012... " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy_linestring(gdf=gdf)\n", "gdf_xy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Polygon Data\n", "\n", "The polygon data stored as shape file will be loaded as GeoDataFrame. It can be seen that the objects in the geometry column are Shapely objects." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.602520Z", "start_time": "2020-12-29T14:35:58.555509Z" } }, "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", "
idformationgeometry
0NoneSand1POLYGON ((0.25633 264.86215, 10.59347 276.7337...
1NoneTonPOLYGON ((0.25633 264.86215, 0.18819 495.78721...
2NoneSand2POLYGON ((0.18819 495.78721, 0.24897 1068.7595...
3NoneSand2POLYGON ((511.67477 1068.85246, 971.69794 1068...
\n", "
" ], "text/plain": [ " id formation geometry\n", "0 None Sand1 POLYGON ((0.25633 264.86215, 10.59347 276.7337...\n", "1 None Ton POLYGON ((0.25633 264.86215, 0.18819 495.78721...\n", "2 None Sand2 POLYGON ((0.18819 495.78721, 0.24897 1068.7595...\n", "3 None Sand2 POLYGON ((511.67477 1068.85246, 971.69794 1068..." ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "import gemgis as gg\n", "\n", "gdf = gpd.read_file(file_path + 'interfaces_polygons.shp')\n", "\n", "gdf.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inspecting the geometry column\n", "\n", "The elements of the geometry columns can be accessed by indexing the GeoDataFrame. It can be seen that the objects in the ``geometry`` column are Shapely objects." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.618615Z", "start_time": "2020-12-29T14:35:58.604521Z" } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.634633Z", "start_time": "2020-12-29T14:35:58.620617Z" } }, "outputs": [ { "data": { "text/plain": [ "'POLYGON ((0.256327195431048 264.86214748436396, 10.59346813871597 276.73370778641777, 17.13494014188'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.loc[0].geometry.wkt[:100]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.650622Z", "start_time": "2020-12-29T14:35:58.636621Z" } }, "outputs": [ { "data": { "text/plain": [ "shapely.geometry.polygon.Polygon" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(gdf.loc[0].geometry)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting the Coordinates\n", "\n", "The resulting GeoDataFrame has now an additional ``X`` and ``Y`` column. These values represent the single vertices of each Polygon. The geometry types of the shapely objects in the GeoDataFrame were converted from Polygons to Points to match the X and Y column data. The ``id`` column was dropped by default. The index of the new GeoDataFrame was reset.\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.698641Z", "start_time": "2020-12-29T14:35:58.652625Z" } }, "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", "
formationgeometryXY
0Sand1POINT (0.25633 264.86215)0.26264.86
1Sand1POINT (10.59347 276.73371)10.59276.73
2Sand1POINT (17.13494 289.08982)17.13289.09
3Sand1POINT (19.15013 293.31349)19.15293.31
4Sand1POINT (27.79512 310.57169)27.80310.57
\n", "
" ], "text/plain": [ " formation geometry X Y\n", "0 Sand1 POINT (0.25633 264.86215) 0.26 264.86\n", "1 Sand1 POINT (10.59347 276.73371) 10.59 276.73\n", "2 Sand1 POINT (17.13494 289.08982) 17.13 289.09\n", "3 Sand1 POINT (19.15013 293.31349) 19.15 293.31\n", "4 Sand1 POINT (27.79512 310.57169) 27.80 310.57" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Data\n", "\n", "The figures below show the original polygon data and the extracted point data with the respective X and Y data using ``matplotlib``. It can be seen that the single vertices the original Polygons were made of were extracted.\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.984042Z", "start_time": "2020-12-29T14:35:58.700634Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, (ax1,ax2) = plt.subplots(1,2)\n", "\n", "gdf.plot(ax=ax1, column='formation', aspect='equal')\n", "ax1.grid()\n", "\n", "gdf_xy.plot(ax=ax2, aspect='equal')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Removing the corner points of the polygons\n", "\n", "In the above plot, it can be seen, that the corner points are still present in the extracted X and Y point pairs. The additional argument ``remove_total_bounds`` can be used to remove vertices that are equal to either of the total bounds of the polygon gdf.\n", "\n", "The total bounds of the original gdf:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:58.999672Z", "start_time": "2020-12-29T14:35:58.986050Z" } }, "outputs": [ { "data": { "text/plain": [ "array([ 1.88186862e-01, -6.89945891e-03, 9.72088904e+02, 1.06885246e+03])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf.total_bounds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The length of the extracted vertices:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.014678Z", "start_time": "2020-12-29T14:35:59.004678Z" } }, "outputs": [ { "data": { "text/plain": [ "269" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(gdf_xy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extracting the vertices but removing the total bounds. A total of 18 points were removed that were within 0.1 units of the total bounds. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.077792Z", "start_time": "2020-12-29T14:35:59.017680Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "251\n" ] }, { "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", "
formationgeometryXY
1Sand1POINT (10.59347 276.73371)10.59276.73
2Sand1POINT (17.13494 289.08982)17.13289.09
3Sand1POINT (19.15013 293.31349)19.15293.31
4Sand1POINT (27.79512 310.57169)27.80310.57
5Sand1POINT (34.41735 324.13919)34.42324.14
\n", "
" ], "text/plain": [ " formation geometry X Y\n", "1 Sand1 POINT (10.59347 276.73371) 10.59 276.73\n", "2 Sand1 POINT (17.13494 289.08982) 17.13 289.09\n", "3 Sand1 POINT (19.15013 293.31349) 19.15 293.31\n", "4 Sand1 POINT (27.79512 310.57169) 27.80 310.57\n", "5 Sand1 POINT (34.41735 324.13919) 34.42 324.14" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy_without_bounds = gg.vector.extract_xy(gdf=gdf, remove_total_bounds=True, threshold_bounds=0.1)\n", "print(len(gdf_xy_without_bounds))\n", "gdf_xy_without_bounds.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The removal of the points can also be inspected visually." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.364963Z", "start_time": "2020-12-29T14:35:59.079797Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, (ax1,ax2) = plt.subplots(1,2)\n", "\n", "gdf_xy.plot(ax=ax1, aspect='equal')\n", "ax1.grid()\n", "\n", "gdf_xy_without_bounds.plot(ax=ax2, aspect='equal')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Geometry Collections\n", "\n", "Geometry collections contain different types of geometries. Here, a GeoDataFrame is created with one GeometryCollection object and two LineStrings." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.380391Z", "start_time": "2020-12-29T14:35:59.366860Z" } }, "outputs": [], "source": [ "from shapely.geometry import LineString\n", "import geopandas as gpd\n", "import gemgis as gg\n", "\n", "line1 = LineString([(0, 0), (1, 1), (1, 2), (2, 2)])\n", "line2 = LineString([(0, 0), (1, 1), (2, 1), (2, 2)])\n", "collection = line1.intersection(line2)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.396378Z", "start_time": "2020-12-29T14:35:59.383373Z" } }, "outputs": [ { "data": { "text/plain": [ "shapely.geometry.collection.GeometryCollection" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(collection)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating the GeoDataFrame with different geom_types" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.412389Z", "start_time": "2020-12-29T14:35:59.397379Z" } }, "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", "
geometry
0GEOMETRYCOLLECTION (LINESTRING (0.00000 0.0000...
1LINESTRING (0.00000 0.00000, 1.00000 1.00000, ...
2LINESTRING (0.00000 0.00000, 1.00000 1.00000, ...
\n", "
" ], "text/plain": [ " geometry\n", "0 GEOMETRYCOLLECTION (LINESTRING (0.00000 0.0000...\n", "1 LINESTRING (0.00000 0.00000, 1.00000 1.00000, ...\n", "2 LINESTRING (0.00000 0.00000, 1.00000 1.00000, ..." ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf = gpd.GeoDataFrame(geometry=[collection, line1, line2])\n", "gdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting the Coordinates\n", "\n", "The resulting GeoDataFrame has now an additional ``X`` and ``Y`` column. These values represent the single vertices of each Polygon. The geometry types of the shapely objects in the GeoDataFrame were converted from Polygons to Points to match the X and Y column data. The ``id`` column was dropped by default. The index of the new GeoDataFrame was reset.\n", "\n", "**NB: By default, points within a geometry collection are dropped as they usually do not represent true layer boundaries and rather corner points.**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.460401Z", "start_time": "2020-12-29T14:35:59.414380Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryXY
0POINT (0.00000 0.00000)0.000.00
1POINT (1.00000 1.00000)1.001.00
2POINT (0.00000 0.00000)0.000.00
3POINT (1.00000 1.00000)1.001.00
4POINT (1.00000 2.00000)1.002.00
5POINT (2.00000 2.00000)2.002.00
6POINT (0.00000 0.00000)0.000.00
7POINT (1.00000 1.00000)1.001.00
8POINT (2.00000 1.00000)2.001.00
9POINT (2.00000 2.00000)2.002.00
\n", "
" ], "text/plain": [ " geometry X Y\n", "0 POINT (0.00000 0.00000) 0.00 0.00\n", "1 POINT (1.00000 1.00000) 1.00 1.00\n", "2 POINT (0.00000 0.00000) 0.00 0.00\n", "3 POINT (1.00000 1.00000) 1.00 1.00\n", "4 POINT (1.00000 2.00000) 1.00 2.00\n", "5 POINT (2.00000 2.00000) 2.00 2.00\n", "6 POINT (0.00000 0.00000) 0.00 0.00\n", "7 POINT (1.00000 1.00000) 1.00 1.00\n", "8 POINT (2.00000 1.00000) 2.00 1.00\n", "9 POINT (2.00000 2.00000) 2.00 2.00" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf)\n", "\n", "gdf_xy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Data\n", "\n", "The figures below show the original polygon data and the extracted point data with the respective X and Y data with ``matplotlib``. Note the point in the upper right of the left plot which was dropped during the extraction of the vertices.\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.828473Z", "start_time": "2020-12-29T14:35:59.461391Z" } }, "outputs": [ { "data": { "image/png": "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wQcfaPTo0Zo+fbp27tzZH1OOK7uuSyycsi6GYai8vFx33nmnxo0b1+04N62N5K6+IdE77Lw2ZjllXfqzdzjir/1e6eo/I24YRo9/WjzS+Ej7rWCmltGjR2v06NGh7ZKSEp08eVKrV6/W1KlTEzrPRLDzupjhlHVZsGCBvvjiC3322We9jnXL2lzJTX1DondcyW5rEy2nrEt/9g7HnCEZPny4UlNTu7wKaG5u7pLKgnJzcyOOHzBggIYNG5awufYmlloimTRpkr788st4Ty/h7Lou8WK3dXn66af18ccfa/v27bruuut6HOu2tXFT35DoHXZem3iw27r0d+9wTCBJT09XcXGxfD5f2H6fz6fJkydHPKakpKTL+Orqak2YMEFpaWkJm2tvYqklktraWuXl5cV7egln13WJF7usi2EYWrBggT744AN9+umnKiws7PUYt62Nm/qGRO+w89rEg13WxbLeYeJCW8u99957RlpamlFRUWHU1dUZixYtMn70ox8Zx48fNwzDMJYtW2Y8+OCDofF///vfjUGDBhmLFy826urqjIqKCiMtLc3405/+ZFUJIWZr+cMf/mB8+OGHxt/+9jfj8OHDxrJlywxJRmVlpVUlhJw9e9aora01amtrDUnGK6+8YtTW1honTpwwDMNZ62K2Fjuvy5NPPmkMGTLEqKmpMRobG0M/Fy5cCI1x0trEyk19wzDoHXZdG3pH39fGUYHEMAzj9ddfN66//nojPT3duO2228I+hjR37lxj2rRpYeNramqM8ePHG+np6cbIkSONdevW9fOMu2emlpdfftm44YYbjMzMTOOaa64x7rzzTmPr1q0WzLqr4MfXrv6ZO3euYRjOWheztdh5XSLVIcl46623QmOctDZ94aa+YRj0DjuuDb2j72vj+cedAwAAWMYx15AAAAD3IpAAAADLEUgAAIDlCCQAAMByBBIAAGA5AgkAALAcgQQAAFiOQAIAACxHIAEAAJYjkAAAAMsRSAAAgOUIJAAAwHL/H3GqCEIhU/HWAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, (ax1,ax2) = plt.subplots(1,2)\n", "\n", "gdf.plot(ax=ax1, aspect='equal')\n", "ax1.grid()\n", "\n", "gdf_xy.plot(ax=ax2, aspect='equal')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Additional Arguments\n", "\n", "Several additional arguments can be passed to adapt the functionality of the function. For further reference, see the [API Reference for extract_xy](https://gemgis.readthedocs.io/en/latest/api_reference/vector_data.html).\n", "\n", "* reset_index (bool)\n", "* drop_id (bool)\n", "* drop_level0 (bool)\n", "* drop_level1 (bool)\n", "* drop_index (bool)\n", "* drop_points (bool)\n", "* overwrite_xy (bool)\n", "* target_crs(str, pyproj.crs.crs.CRS)\n", "* bbox (list)\n", "* remove_total_bounds (bool)\n", "* threshold_bounds (float, int)\n", "\n", "### Original Function\n", "\n", "Original function with default values of arguments." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.875380Z", "start_time": "2020-12-29T14:35:59.830476Z" } }, "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", "
geometryXY
0POINT (0.00000 0.00000)0.000.00
1POINT (1.00000 1.00000)1.001.00
2POINT (0.00000 0.00000)0.000.00
3POINT (1.00000 1.00000)1.001.00
4POINT (1.00000 2.00000)1.002.00
\n", "
" ], "text/plain": [ " geometry X Y\n", "0 POINT (0.00000 0.00000) 0.00 0.00\n", "1 POINT (1.00000 1.00000) 1.00 1.00\n", "2 POINT (0.00000 0.00000) 0.00 0.00\n", "3 POINT (1.00000 1.00000) 1.00 1.00\n", "4 POINT (1.00000 2.00000) 1.00 2.00" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf,\n", " reset_index=True,\n", " drop_id=True,\n", " drop_level0=True,\n", " drop_level1=True, \n", " drop_index=True, \n", " drop_points=True,\n", " overwrite_xy=True, \n", " target_crs=gdf.crs,\n", " bbox = None)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Avoid resetting the index and do not drop ID column\n", "\n", "This time, the index is not reset and the id column is not dropped. " ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.923400Z", "start_time": "2020-12-29T14:35:59.878384Z" } }, "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", "
geometrypointsXY
00POINT (0.00000 0.00000)[0.0, 0.0]0.000.00
0POINT (1.00000 1.00000)[1.0, 1.0]1.001.00
10POINT (0.00000 0.00000)[0.0, 0.0]0.000.00
0POINT (1.00000 1.00000)[1.0, 1.0]1.001.00
0POINT (1.00000 2.00000)[1.0, 2.0]1.002.00
\n", "
" ], "text/plain": [ " geometry points X Y\n", "0 0 POINT (0.00000 0.00000) [0.0, 0.0] 0.00 0.00\n", " 0 POINT (1.00000 1.00000) [1.0, 1.0] 1.00 1.00\n", "1 0 POINT (0.00000 0.00000) [0.0, 0.0] 0.00 0.00\n", " 0 POINT (1.00000 1.00000) [1.0, 1.0] 1.00 1.00\n", " 0 POINT (1.00000 2.00000) [1.0, 2.0] 1.00 2.00" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf,\n", " reset_index=False,\n", " drop_id=False,\n", " drop_level0=True,\n", " drop_level1=True, \n", " drop_index=False, \n", " drop_points=False,\n", " overwrite_xy=True, \n", " target_crs=gdf.crs,\n", " bbox = None)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resetting the index and keeping index columns\n", "\n", "The index is reset but the previous index columns ``level_0`` and ``level_1`` are kept." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2020-12-29T14:35:59.971439Z", "start_time": "2020-12-29T14:35:59.925398Z" } }, "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", "
level_0level_1geometrypointsXY
000POINT (0.00000 0.00000)[0.0, 0.0]0.000.00
100POINT (1.00000 1.00000)[1.0, 1.0]1.001.00
210POINT (0.00000 0.00000)[0.0, 0.0]0.000.00
310POINT (1.00000 1.00000)[1.0, 1.0]1.001.00
410POINT (1.00000 2.00000)[1.0, 2.0]1.002.00
\n", "
" ], "text/plain": [ " level_0 level_1 geometry points X Y\n", "0 0 0 POINT (0.00000 0.00000) [0.0, 0.0] 0.00 0.00\n", "1 0 0 POINT (1.00000 1.00000) [1.0, 1.0] 1.00 1.00\n", "2 1 0 POINT (0.00000 0.00000) [0.0, 0.0] 0.00 0.00\n", "3 1 0 POINT (1.00000 1.00000) [1.0, 1.0] 1.00 1.00\n", "4 1 0 POINT (1.00000 2.00000) [1.0, 2.0] 1.00 2.00" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_xy = gg.vector.extract_xy(gdf=gdf,\n", " reset_index=True,\n", " drop_id=False,\n", " drop_level0=False,\n", " drop_level1=False, \n", " drop_index=False, \n", " drop_points=False,\n", " overwrite_xy=True, \n", " target_crs=gdf.crs,\n", " bbox = None)\n", "\n", "gdf_xy.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Background Functions\n", "\n", "The function `extract_xy` is a combination of the following functions:\n", "\n", "- `extract_xy_points`\n", "- `extract_xy_linestrings`\n", "- `explode_geometry_collection`\n", "- `explode_multilinestrings`\n", "- `explode_polygons`\n", "- `set_dtype`\n", "\n", "For more information of these functions see the [API Reference](https://gemgis.readthedocs.io/en/latest/api_reference/vector_data.html)." ] } ], "metadata": { "hide_input": false, "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.10.0" }, "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 }