From 25f20becd8e99493d6833738ad87bd08c0571d55 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Fri, 2 Feb 2024 13:19:39 +0100 Subject: [PATCH 1/2] vector expression example --- examples/expression.ipynb | 423 ++++++++++++++++++++++++ geoengine/workflow_builder/operators.py | 99 ++++++ 2 files changed, 522 insertions(+) create mode 100644 examples/expression.ipynb diff --git a/examples/expression.ipynb b/examples/expression.ipynb new file mode 100644 index 00000000..274794e8 --- /dev/null +++ b/examples/expression.ipynb @@ -0,0 +1,423 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Compute expressions on vector data (polygons)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import geoengine as ge\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "ge.initialize(\"http://localhost:3030/api\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Retrieve source data, which are country polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometrystartend
0MULTIPOLYGON (((13.81572 48.76643, 13.78586 48...NaTNaT
\n", + "
" + ], + "text/plain": [ + " geometry start end\n", + "0 MULTIPOLYGON (((13.81572 48.76643, 13.78586 48... NaT NaT" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "query_rectangle = ge.QueryRectangle(\n", + " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", + " ge.TimeInterval(np.datetime64('2014-04-01')),\n", + " ge.SpatialResolution(0.1, 0.1)\n", + ")\n", + "\n", + "source_workflow = ge.register_workflow(ge.workflow_builder.operators.OgrSource(\"germany_outline\"))\n", + "\n", + "source_data = source_workflow.get_dataframe(query_rectangle)\n", + "\n", + "source_data.plot()\n", + "\n", + "source_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compute the area as a new column" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "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", + "
geometryareastartend
0MULTIPOLYGON (((13.81572 48.76643, 13.78586 48...45.930027NaTNaT
\n", + "
" + ], + "text/plain": [ + " geometry area start end\n", + "0 MULTIPOLYGON (((13.81572 48.76643, 13.78586 48... 45.930027 NaT NaT" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "area_workflow = ge.register_workflow(\n", + " ge.workflow_builder.operators.VectorExpression(\n", + " source_workflow.workflow_definition().operator,\n", + " expression=\"area(geom)\",\n", + " input_columns=[],\n", + " output_column='area',\n", + " )\n", + ")\n", + "\n", + "area_data = area_workflow.get_dataframe(\n", + " ge.QueryRectangle(\n", + " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", + " ge.TimeInterval(np.datetime64('2014-04-01')),\n", + " ge.SpatialResolution(0.1, 0.1)\n", + " )\n", + ")\n", + "\n", + "area_data.plot()\n", + "\n", + "area_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compute a new column based on the previously created one" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "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", + "
geometryareaarea2xstartend
0MULTIPOLYGON (((13.81572 48.76643, 13.78586 48...45.93002791.860055NaTNaT
\n", + "
" + ], + "text/plain": [ + " geometry area area2x \\\n", + "0 MULTIPOLYGON (((13.81572 48.76643, 13.78586 48... 45.930027 91.860055 \n", + "\n", + " start end \n", + "0 NaT NaT " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAGdCAYAAABkcnROAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8WgzjOAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTU0lEQVR4nO3dd3hT9f4H8PfJaNI2TdKR7k0XtJQtG0EQXCBDUURUxHn9KaJ4lesCF3rdXhXEq6BXhjhAUIayN5SWAmWU7r1H2jRNmnF+f1QCha60SU7G5/U8eR56zunJJxTe/Z5zvoNhWZYFIYS4GB7XBRBCCBco/AghLonCjxDikij8CCEuicKPEOKSKPwIIS6Jwo8Q4pIo/AghLknAdQHXMhqNKC0thZeXFxiG4bocQoiDYVkWjY2NCA4OBo/XcfvO7sKvtLQUYWFhXJdBCHFwRUVFCA0N7XC/3YWfl5cXgNbCpVIpx9UQQhxNQ0MDwsLCTFnSEbsLv8uXulKplMKPENJjXd02owcehBCXROFHCHFJFH6EEJdE4UcIcUkUfoQQl0ThRwhxSRR+hBCXROFHCHFJFH6EEJdE4UcIcUkUfoQQl0ThRwhxSWaF39KlS8EwTJtXQkKCaf/48eOv2//EE09YvGhCCOkts2d1SUxMxK5du66cQND2FI8++ijeeOMN09ceHh69KI/0VJmyGRfKGjAh3p8mhSWkHWaHn0AgQGBgYIf7PTw8Ot1PrE/dosfLmzIwe2gYWgxGiAR8rksixO6Yfc8vKysLwcHBiI6Oxty5c1FYWNhm/9q1a+Hn54ekpCQsWbIEarW60/NptVo0NDS0eZHe2ZJeijPFSoR6u1PwEdIBs1p+w4cPx5o1axAfH4+ysjIsW7YMY8eORUZGBry8vHDfffchIiICwcHBOHPmDF588UVkZmbi119/7fCcy5cvx7Jly3r9QcgVZ0uU2P/CeHiK7G6uWkLsBsOyLNvTb66vr0dERAQ++ugjLFiw4Lr9e/bswcSJE5GdnY0+ffq0ew6tVgutVmv6+vIU1EqlkmZy7oFLFY1IK6jDvTeEc10KIZxoaGiATCbrMkN61TSQy+WIi4tDdnZ2u/uHDx8OAJ2Gn0gkgkgk6k0Z5Co/phTB20PIdRmE2L1e9fNTqVTIyclBUFBQu/vT09MBoMP9xLJa9EZsOlVCl7uEdINZ/0sWL16MqVOnIiIiAqWlpXj99dfB5/MxZ84c5OTkYN26dbjtttvg6+uLM2fOYNGiRRg3bhySk5OtVT+5ytHcGtQ2tWDTqRJM6huAMJ8r3YxYloVWb4S6xYDmFj18JSK48Xk4WVCHP8+VQ6s3oo/CE0MifJAUIqXuMcTpmRV+xcXFmDNnDmpqaqBQKDBmzBgcO3YMCoUCGo0Gu3btwieffIKmpiaEhYVh1qxZeOWVV6xVO7nGpfJGJAR6IVjmjrH/3osAqQjDo3zx2LhoqFsMqFe3QKM34kRuDdanFEEk4EHdYrjuPHEBEkxNDsaQCG8kh8khoZYkcUK9euBhDd29WUmut+ZwHuaOiACfYaBq0QMAvESC61pxM748jFOF9d06J8MA8QFeGBgmx6BwOW5JDIKsi3uKdU0t2HmunB66EE50N0NobK8TcXfjQ8jngcdjIBULIRUL2718NeeClmWBi+WN2JBShBd/OYtlv5/r9PiDWVUY894e7DxXjspGjZmfgBDboesZJ9Ko0XfruDExfkjrZsvvWsdza5FRooRY2HrJvOpALnQGI5JD5difWYUT+bUAgL2ZVRj+zm74eLjBV+KGmYNDMX90JHW6JnaDLnudyNt/nMfLt/fr8rhGjQ43fbgfVY3aLo+1JD+JCO/flYwJCf7Q6Ax46Zcz+L+bYhDj72XTOohzo8teF3RtFxeWZVFQ04RzpUoU110ZZuglFmLm4BBbl4dqlRbLtp7D7gsVeOuP89icXop7Vx1Do0Zn81oIocteJzJ3eITpzxqdAQu+S8Hh7BrTtoUTY7Ho5jgAgMSNmx99fo0aC747afq6WtWCE3m1mNg3gJN6iOuilp8TUXiJ0NxiQEFNEw5cqsKRnJo2+8+VKk1/fnpiLFY/NAxeYu5//605kg+9wch1GcTFUPg5mXe2XUCgTIzJiYHY8tQYzBociruHhCIuQIJHxka3OXZCgj+2/t8Y3BDpw1G1wNQBwZg7PAJ1arr0tQWNzoCT+bXIrVJxXQrn6IGHE7lU0YjJHx/Ap/cOxJ0Du39Pr0alxch396BFb9vWF5/HYEK8P0rrmzFzcMh14Uwso7S+GVtPl+JQdjVO5NVCqzfijuQgfH7fYK5Lswp64OGCYv0lmJjgj3e3XzTrIYKvRITb+9t+/LXByGLXhQqcL2vA1tOlNn9/V7FwwymkFdbhYFY1tHojnprQx2mDzxwUfk6EYRgsn9kf4+P9kVvVZNb3Tknkdvbt+ma67LWW9Y+OwG1X/XLro5BwWI39oPBzMv5SMZbP7I8BYfJuf4/RyEKl1eOdGf2tV1gXpGKahstSsitVWPLrWVQ0tI6w0eiNeGVzBgDgrelJyKpUXfeASWcwQqu/fpy3M+P+UR/hHI/H4K4hoWBZFulFddh4stjmNSi8aE5HSzmYVYWHRkXC/++/07PFShiMLD64ewCqVVpMGxCMV3/LgNRdCJ2exdHcGmRXNgJo7S71+tR+LjGrD7X8XAzLsjhVWIcNJwqv29d62ZyMmYNs3wG6f4jM5u/prNIK6xHrL8GRnBqsPpyHfZmV+OXJUdhyuhRZFSoU1KjxzMRYhHp7QCzk4UJZA3QGFjoDizVH8pFbbd4tE0dFLT8XwrIsHvj2BA5mVeP+EW1nXNHoDPjzfAUqGzSYNzICWoMRf5wps0ld3h5CzB1u2xlgThXWYePJIoiFfMy5IRxxAc4xxE6jM8Dt78kt1h4vwLaz5QCAvZmV8BQJoJCIsP5EIYZEDMC8EREoUzbjy305pu/3k4jg4+HGVfk2ReHnQrR6I9IL6+Hj6YbHx11ZVqBRo8PML48gq7K179cLU+Lx7sz+OHipCg3dnCyhp/qHyPDJvQPhLxVb9X2ullGixJyvj0Gja73vtfpwPm5K8MfHswd2OV2XvTtf1oA3pycCABZPjsfYWAVW7s/BpYrWn+3lqcwqGjRQeImQVXGlv19yqAzvzUqGtyeFH3EyYiEfu56/EZ4iQZsJSo0sUFDbOvZ3bKwfnryxD3g8Bh5uAquEX0KgFyb3C8DoGD8Mi/RBQa0av6QWI62wDmmF9dDqDPj4noFmPbQxx4r9Oabgu2zPxUq8viUDn9w7yCrvaY7sShUMRhbxgea3RgV//9wAIFohQbRCgmC5O55ZfwrKq56oP7wmBWNi/JBZ0Xqvb2iEN9Y9OgJuAte5E0bh52IC2mlhScUCrH90BBgGSA6RQW9k8XNKEcobrDMfX3alCnEBXsgozcUTP6S2O7rj3lXHsOv5GxEid7f4+9eqWhAf4IVqlRY1TS2m7ZvTS/HQ6CgMtFLodtcbv59HQ7MOr9zeFzH+7XdL8RILwedd/1Ai9qoZcrR6Aw5lVWP9icI2wQcAlY1a/HqqxPR1UojMpYIPoPAjaH3QMSTCGwCQXdmIR79PRZ4Vb3rrjSy2dNGp2VfihmBZa1BXNWqxdOs5yNyFeHh0VIeB0F2r5w+DSMDD5vQSLPrxdJt9b/5+Hj8/MZKzp51niutxMKsKLAvctfKoaXu0nydYwPRzifD1gIebADclKLB4cjxO5NWiUaPHpH5XJoj478E8/JZeYrrk7Uzre7Iu8ZT3Mgo/F9SiN6LFYERKXm2bkCuua8aGlMJ21/WwteK6ZpwtUWLNkXyczK9D4d+X5ZvSSvDGnYm4a0hoj/+jioWtE6oODvfGAyMjkBgsxdhYBXKqVMipVKFMqUGwFVqcXTEYWby8KQOXB5xKxQI8MzEWcQFeKK5rxo3xCjS36FFSr0FdUwuadQb0D5Hhvq+P42huDR4eHdUm/P4xvg8eHRuN+WtOtJndpz05VU34cl8O5o2McJk+lzS218WUKZsx+eMDULcYYDDa1Y++jRh/Ce4dFoa3/rjQ7v4+Ck/cPyICMweHQubevf+sOoMR5UoNPNz4kLoLsSmtBIMjvHvdkrSUw9nVOHCpCqcK69HUosf0gSFYMCYKhbVqvL8zE0+O74MgmRg6A4tAmRhGI4vbPjuIi+Wt9+3kHkJ8eu8gjIv1A8MwaNLq4SkSYPXhPLzx+3l05386wwCT+wXgy7lD2r2sdgTdzRAKPxdTVKtGZnkjPtuThTPFyq6/gQPRCk/8+uQoPL3+FA5mVXd6rLuQj+mDgvHMxFgEydpvrZ0vbcD7Oy/iQFY1vD3cMCRCjtyqJoiFfKx7dDi87KClk1OlQmGtGhPi/aE3GLH/UhVWH86H1F2AP89VgMcwMLAsjCyLO5KD8f5dyfjjTBme/+n0def64r7B8BDx8eh3J9EvWAqNztCtS9+rvTk9CfNGRHR9oB3qbobQZa+L+XxPNn49VQydwa5+57VRWt+MvOqmLoMPAJp1Bqw/UYS9F6uwev4w9A1q+49906li/PPnM6bPW63SYue5Cvh7ifDLP0bZRfDpDUb8ll6KaQOCwbIstmeUY+X+HJwrbbjqqCs/r62nSzudCGJ4tA8e/f4k9Ea2019wQj6DOTeEI8ZfgkCpGOdKGxAX4IUNKYV46/fziPOXYHi0ryU+ol2i8HMxv58p7TL4In09kF+j7vQYaxLweHj0+5NdH3iV8gYNZq88ivfvTsb4eH9UNWrxzaE8rDmS3+7xlY1aaFoMdnF/a+PJYkjFAsT4S5BeVI+n15/q1fm+PpCL5TP745n1pzps8flJ3LDy/iEYetVcjjf3C0CpUgOJWIAmrR7DOJzn0RYo/FzMnYNCsO5469C2CF8P8HkMvEQCjIrxg4eQD4WXCDlVKnx9MI+zGlVaPVQ9WFupUavHEz+kdfv4SxUqm3aubk9+dRN+PFmEX58chYwSJZ5e3/36O/K/YwV4cnwfDI/yhZuAh4yShuuOWXFN8AGtT/0rGjTYfrYM0weFgOeg9/y6i8LPxbw+tR8kIgHULXq8dkdim75djRod9mZW4dvD+dwVaENcLpxkNLLYeqYUr/12Do0aHapVWjyz/hSKapt7fW51iwH/2ZONu4eGYnSML97bkYm86iaMjvFFvVqHl2/vi+TQ9sdSDw73RmKwFNmVzj/TMz3wIACADScK8fLmDLt+Amxp3z98A8bFKWz6nsa/+ziu3J9jekoLAANCZRga6YPvj+Zb7H6sm4CHu4aEYvbQUIgFfKQV1mP14TxkVarMnu3bkdADD2IWe+/6Yg0l9b1vZZlr7fECvPrbueu2ny5W4rSFn7636I1Yd7wQ644XYnC4HBsfH4l+wVLsy6xsMxLEVVH4OQBr97zXG4z4/mi+1c5vr2Jt3L9vR0Y5lm09b9P3vCytsB6b00tx15BQzofv2QsKPztXUt+MuqYWJFlxvru86iZOn+7aGsMAT98Ue90Nf0tr0RuRWd6Ivy5UIEQuxp/nKqDnsHX9xtZzGB7lA63egJhOWn4sy+JymRfLG9AvSOqUw94o/OxciNzdKoP7r9ZHIUF8gJdphg8Bj+H0P6k19Q+R4a3pSRaZMSatsA6Z5Y0IkokRG+CFuqYWZJQocaZEibPFSmSWN6Ll7+niF4yJstpEEd1lMLK4a+URjIz2xdJpiZC3M2/f4exqfPBnJj69ZxB+TivGZ7uz8MOC4RgT68dBxdZF4UfA4zF4bWo/rNyfg1fv6Ic+CgmmfHLA6Z74PTMxFgsnxlpk2NZ/D+Z2OPSuPWeLldd0Wra9phYDmloM2JxeCpm7EEunJaKiQYvzZUpcKGvEkZxq0xjgh79LwcKJsfASCbD2eAGFH3Feo2P8MKqPr+ny5oUp8fi/dWl2PRLEHPNGRGDRpNheX76xLIvsShU+/POSWd9nb+Nkf0otxvzRUZi/JqXdGXyyK1X4589nsGBMFD7fm40dGWW4Jcn2y5tak1kTeC1duhQMw7R5JSQkXHccy7K49dZbwTAMNm/ebKlaiZVdHQxTEgMxLta23UAs7cnxffDR7AHYt3g83pye1Ovg232hAqsO5ELZrEOzzryZb47mdj6riq2pWwx4+LsURPh6dHhMs86A0r+fiD+5Ng3PbUzn5Am5tZjd8ktMTMSuXbuunEBw/Sk++eQTp7xB6mqqezLMwk4MifDG4snxFm1xXSxvxIxBIVjwnXlD7+xVblVTl+s7h/8djiwL/HWuAlKxEDqDEQvGRCHawdf/NTv8BAIBAgM7XuA6PT0dH374IU6ePImgIOdqJjuz9KJ6bDhRiD4KCR4YFYEWvRHny7i9R9Ubz1jo3t5leoMRj46NxjvbLuCCA/+9mGPW4BBsPlWCO5KD4OkmwLG8GiydlohLFY24Z9UxrH1kuEMv/GR2+GVlZSE4OBhisRgjR47E8uXLER7euvKWWq3Gfffdhy+++KLTgLyaVquFVnulhdHQ4Br/sOxNcZ0aG1KKAADfH8uHl0jo0Pf7NqYU4cZORm8YjCwqGzUoqm1GbVMLpiQGXHe1om7R473tF3Eouxqv3dEPz/6Y3u6U+84qt6oJ94+IwIIxUVjw3Un8c0rrLa64AC88MiYKT/6Qiq8fGOqwLUCzhrdt374dKpUK8fHxKCsrw7Jly1BSUoKMjAx4eXnh8ccfh8FgwH//+9/WkzMMNm3ahOnTp3d4zqVLl2LZsmXXbafhbbZlNLK44z+HHLq1d63b+weZJiu9HIS5VSqsP1GIH44Vtrlvt+6R4RgV0/aJ5pM/pOJSRSPq1DrEB0pwNKfWpvXbgzsHBuOlWxOgN7AorW9GTVMLJsT7w92Nj0U/puNoTg02Pj7SdHlsD2wymWl9fT0iIiLw0UcfQaFQ4Pnnn8epU6cgkbT+JuhO+LXX8gsLC6Pw48Dei5WYvyaF6zIs7oYoH2x4dATe2XYB/z3U8Ww1r0/th/mjo0xff7AzE0aWRWm9BvsuVaLehVp9V0sOlWHL/43BsxtOYXN6KU6/NhkyDyH+sTYV286WI0Tujo1PjLR6f9TustlMzsOGDcOkSZPQ3NyMzz77DDzelQfIBoMBPB4PY8eOxb59+yxaOLE8lmVx98qjOFlQx3UpFicRCaDSdr4M5/M3x+GRsdF484/zmNwvACOifeHG52H3hQo8+r9UG1Vqf0QCHh4eE4XkUBle3pSBMB8PDIvwxs7z5aZZaCJ8PbDu0RF2EYA2CT+VSoXw8HAsXboUs2fPRnV125l3+/fvj08//RRTp05FVFRUB2fpWeHEOi5VNGLWl0fQ2EVQuAK5hxBbnhqDDSmF+HJfDtflcO6Duwdg/YlCpHbwy/GFKfF4akKMjau6nlVmdVm8eDGmTp2KiIgIlJaW4vXXXwefz8ecOXOgUCjafcgRHh7e7eAj3IsL8MLaR4fjuY2nMTzKB9UqLf46XwEnHe3WqXq1Dg98exwtemPXBzu5R8dGYdqAYPxnT1a7+71EAtwzLMzGVfWOWeFXXFyMOXPmoKamBgqFAmPGjMGxY8egUDh2Z1hX0ajR4eVNGdiXWYl7bwjHklsT2u2PmRwqx1+LxgFovW+r0Rmg1RuhMxih0RmQXanCin05OJ7n/A8AXGnCh/YwDPD+XcnQ6o24a+URFFz195EUIkVOZRP8pSIESMUorW+Gn0TEYbXmoclMXchT69Lwx5ky09d3DgzG0qmJ8Pa8foA70LqQ0NbTpThZUIdqlRYMgKK6ZkT6emBYpA9EAj4+3mXeMC/iWLw9hJg+MASr/14LhccAicEyPHFjH9yebJ/9eGnpStJGmbIZo9/dc93lq4cbH+NiFRga6Y1guTuqVVqczK9DUZ0aJXXNqGzseJTHqnlD4OEmwHs7LuJsiX0ug0l6j8cAb83ojwnxCniJhZCI7HtKAJrJmbSx52Jlu/ft1C0G7DhXjh3nys0+5xu/n8eu527E9EEhFH5OzMgC7++4CHchD9OdaOp7Cj87klneiIwSJcRCPsJ83BEX4IWfUovhLuRjfLyiV/dTDlyqsmClrYrrmvHlvhzcYaeXP8Ry6tQ6LPrxNHZklOODuwfYxXrHvUXhx4GKBg1O5tdBbzTCyLLoFySDWMjDjylFyKpsxJAIb4yJ8YNYyMf9w8N7PUlEk1ZvmqfN0lbuz8GswSEYFumNlHzn6x9I2tp5rgJphfsx54ZwLBgdBZnHlRBkWRZphXUYHO7tEBOb0D0/GzEaWWSUKhHjL8FX+3NxLLcGr9zeDzwe4OEmQJSfp9nnvFTRCI3OgORQeafH/e9YAV7dnNHDyrs2NtYPL96SgCd+SEVxnfNMeUS6NqmvP5JD5ZB7CJFfrca3h/Ow5/kbOR3vS/f8OFJUq8anu7OQVlCHOnULwnw8cFv/INx3Qzg0OiMKatR4ZGwU5o2M6PAylmVZ1DS1oLBWjaK/X7VNOgyN9MboPn6m37YbThRhQoKiywWOfjhaYJXPetnBrGqEyAuw+/kbsSmtBG/8fh7qFvPmuyOOadeFSuy6UAkAcOPz8NKtCYj0Nf8XORco/HrIaGRR2ahFcZ0aJfXNCJG7Y0iEN3w83XDPsDA8NSEGwXIx3Pg8NGj0KFNq0KwzIK9aBZ3BiORQOQxGFjlVKpwtVuJCWQMK/g66wlp1u+Hx7eE83DssDO/OSgYAvDa1X5d11ja1mNbmsKYNKUVQNuuw4v4h2HGuHPsyLX+Pkdg3A8viaE4NZg8Ng08H3afsCYVfD9Q2teBwdjWk7kIESsUYH+8FqVgAhmHgKRJgWKQPGjQ6rDmcj1/TSq4LH7GQhxh/CXIqm8yeEVjmbt6NZlvOnr49oxyFNWqH+IdPLM9gZLH/UhXULXqH+DdA4dcDPp5umDoguMP9NSot5q9JwZkOFqHW6IzIKOnZ1FG/nirBopvjIBbyu3W83MPNpg8jvtyXjb6BUgAlNnk/Yn8aNY4xLtysNTxcVZNWj3OlSnTn2VBRrRq3f3aow+DrrapGLd7bcbHdfSqtHuXK65dHHB/vb5Va2rMhpQhiIQ+h3tzP7kG4sfa4de8xWwqFXyfOFitx/3+PY+Ty3fjmYB6qVS2dHn80pwZ3rzxq9fVZVx/Ox+d7smC4qtfyyfxaDHrjT4xYvhufXDPkbPqgELjxbfej/vCvS/jknoG4vT/1/3NFOzLKYXSAmTAo/DrhKeKjWqXFS7f2xQd3D4DCq/NOxq9vybDZwtQf/HkJOVVX1tX983yFadr5L/fmYG9mpamlGiJ3x9wR4TapC7g8G8oJNOsMWDgxFncODMaAUFmXf3/EOVSrWkyLtdsz6ufXDXqDEUYWcBN0/ruiqFaNF34+jWO5tpntRO4hxNpHhiMxWIZHvksxdTm4LNZfguRQOZJDZegfKsOsFUfAxU979tBQTOobgIHhcmRXqPDY/1K7nFiUOC6GAXLfuY2zjs7Uz8+CBN28ZAzz8UD/EJnNwk+l0UP4d2151U3oFyRtswZHVqUKWZUq/JJWjCdu7AMGABe/6TaeLMbGk8UAgGCZGHqj/bcKSM+xbOt4YL6dD/Kg8LOQWz45AK3eiPyaztdBtYS+QVLcGKfAHclBpqUDdz8/HizL4pHvTmL3xbYtwNlDQ2FkWbuYkLS0nQcyxPmcKa7HoHBvrsvoFN3zs4CcKhUuljcir7rJJpeVg8LleOnWBCSFyNpsZxgGEvH1v88YMFh1INf6hRHytzd+P891CV2i8LOA39JLbfp+286WoUmrh+aaDtIGI4uT1/Tn8/V0Q/ZVD0YIsYVThfXIsPNpzij8LKBcadvB/PVqHca8twfJS//ErvMVpu1/na9ASX3bWsRCPvgOMMMGcT6f7m5/vQ97QeHnoOrUOrQYjHhybSoySpTIq27Cm+1cahiMLBRS6mJCbC/Hzq846IGHBTDgrmWlM7C44z+HOtyv0uoRKBXbsCJCWhXXNUNvMHa7t4St2WdVDsbPy34Hcau0euRVW/8JNCHXatEbbTKjUE9R+FnAzMGh6BskhcCWU6iYYc81XV8IsZW0wnquS+gQXfZaQB+FBNsXjgXQOhpEozdCqzPgQlkjdpwrg7eHG344VoA6tY7jSgmxrdT8WswbEcF1Ge2i8LMwAZ8HCZ8HTzc+Xt+SgZyqJgh4DEK83Sn8iMspqLXfRd/pstdKWLa1SwoA6I1sm5XuCXEVxXXNaLLTcdwUflay6mAuapo6nwKLEGdX1ajF8xtPc11Guyj8rOQ/dt7BkxBbGRAm57qEdlH4WUl7Y2wJcTXj4xWYPzqS6zLaReFnBXqDEcpmerhByGPjoru93oytUfhZQWpBHTQ6mrOOkBa9/f4/oPCzgj+vmmyAEFd2oYxGeLiUKD/HWLGeEGtLCPLiuoQOmRV+S5cuBcMwbV4JCQmm/Y8//jj69OkDd3d3KBQK3Hnnnbh4sf1lFp3ZgFA51yUQwjmpWIDRffy4LqNDZrf8EhMTUVZWZnodOnRlRpEhQ4Zg9erVuHDhAnbu3AmWZTF58mQYDIZOzuh8fCT2O9EBIbYysW9Al4t+ccns/hgCgQCBgYHt7nvsscdMf46MjMRbb72FAQMGID8/H3369Ol5lQ7Gx4PCj7g2Tzc+HhsXzXUZnTI7lrOyshAcHIzo6GjMnTsXhYWF7R7X1NSE1atXIyoqCmFhYb0u1JGI7Pi3HSHWFiQTY+2jI9A3yD6Wnu2IWf9Lhw8fjjVr1mDHjh1YsWIF8vLyMHbsWDQ2Xnmi8+WXX0IikUAikWD79u3466+/4ObWcUtIq9WioaGhzcvRafSudZlPCNC6Xu+MQSH445mxGGinozqu1qtFy+vr6xEREYGPPvoICxYsAAAolUpUVlairKwMH3zwAUpKSnD48GGIxe3PJrx06VIsW7bsuu32tGi5uTJKlJ3OrkyIsxkYJsf7dyUjNoD7p7vdXbS8V9dncrkccXFxyM7ONm2TyWSIjY3FuHHj8PPPP+PixYvYtGlTh+dYsmQJlEql6VVUVNSbkuzC7gs0eShxHRKRABsfH2kXwWeOXoWfSqVCTk4OgoKC2t3PsixYloVWq+3wHCKRCFKptM3Lkam0eqw7UcB1GYTYjEqrR0GN4y2VYFb4LV68GPv370d+fj6OHDmCGTNmgM/nY86cOcjNzcXy5cuRmpqKwsJCHDlyBHfffTfc3d1x2223Wat+u/PvHRdR0dBx2BPijM7a+Rq97TGrq0txcTHmzJmDmpoaKBQKjBkzBseOHYNCoYBOp8PBgwfxySefoK6uDgEBARg3bhyOHDkCf39/a9VvV47l1uD7o9TqI8QR9OqBhzV092alvdHoDJjyyQGasZm4nEHhcvxvwXBIRPYxjZtNHniQK3aeK6fgIy4pSCaGkG+fKxd2hsLPQvZnVnFdAiGc2Ha2HAOX/YV7vjqKGpXj3O+m8LOQHFoYnLiwZp0Bx/NqMe+bEzhTXM91Od1C4WchSjUtVkTI+bIGzPjyCD7dlQW9wX4nMgUo/CxGZafL8xFiawYji493XcK9q46htL6Z63I6ROFnIRR+hLR1sqAOD69JgcFoVx1KTCj8LEBnMNKaHYS042J5I35LL+G6jHZR+FlAHS1OTkiHlm09j21ny7gu4zr20SvRARiNLFoMRhiMLMRCPvi8K/2a8uhJLyEdUjbr8OyGdOiNLG5JDLSb2Z0p/LrQqNHhzd/PY8vpUtOlrcxdiGGR3qhT6xAXIKHOzYR0ocVgxDPrT8FPIsL3D9+AfsHcj96i4W1dyKtuwoQP9nFdBiFOQ+Elwi9PjEK4r4dVzk/D2yxEbzBCwHO8oTuE2KuqRi1mf3UUOVUqTuug8OtCtEKC+0dEcF0GIU5F2ayD3F3IaQ10z68TeoMR0z4/jPNljr+uCCH25PbkIPhKRJzWQC2/Tgj4PPh5cfsDIsQZ1TW1gOvHDRR+XfCn8CPE4k4X13M+8oPCrwsPjYqEH8fNc0KczT/Gx0DA5zZ+6J5fF5JCZDjy0k0oqGlCfo0aBy5VYce5ciibdZiaHIyiOjVO5NVyXSYhDmPm4BA8OCqS6zKon19v5VSpcOsnB9Fi59P3EGIPbu4XgFXzhoBhrNd9jPr52UgfhQRPju/DdRmEOASRgGfV4DMHhZ8FzBsZAeoHTUjXLpQ1cP6U9zIKPwvwdBPATqcsI8Su5FQ1IbOikesyAFD4WQR1giak+9YfL+S6BAAUfhax/oR9/DAJcQT7L9nHSocUfhZwMMs+fpiEOIKKBi2O5dZwXQaFnyXI3d24LoEQh9GsM+DeVccwa8URfH80n7M6KPx6iWVZJNrBxIyEOJrUgjq89ts5XCzn5p45jfDoBY3OgEe/P4mDWdVcl0KIQ5KIBJBxNLUVtfx64dPdWRR8hPSCv1QEBUdj56nl1wOZ5Y34dPclbDtbznUphDi0ygYtZ+9N4WcmpVqHe1YdRb1ax3UphDi8sbF+nM3uQuHXTY0aHUrrNfj2UB4FHyEWIhFxF0FmRe7SpUvBMEybV0JCAgCgtrYWTz/9NOLj4+Hu7o7w8HA888wzUCqVVinclv46X4Ehb+7ClE8O4MeTRVyXQ4jT2HSqBCv358DIwfhQs2M3MTERu3btunICQespSktLUVpaig8++AD9+vVDQUEBnnjiCZSWluLnn3+2XMU2Vlynxpu/n6cpqwixAr2RxbvbLyLWX4KJfQNs+t5mh59AIEBgYOB125OSkvDLL7+Yvu7Tpw/efvtt3H///dDr9aaQdCTqFj3G/XsvTVpAiBXFBUhwU4K/zd/X7DuNWVlZCA4ORnR0NObOnYvCwo7HtV6eTNARgw8AxAI+lk5LRKSVFlcmhABjYhSczPFn1kzO27dvh0qlQnx8PMrKyrBs2TKUlJQgIyMDXl5ebY6trq7GkCFDcP/99+Ptt9/u8JxarRZa7ZXH3Q0NDQgLC7OrmZx1BiO+P1qAd7Zd4HzRFUKciZuAhyMv3WTRdXK6O5Nzr6axr6+vR0REBD766CMsWLCgzZvffPPN8PHxwZYtWyAUdtyDe+nSpVi2bNl12+0p/C77Ym823t+ZyXUZhDiNKD9P7F083qLntMk09nK5HHFxccjOzjZta2xsxC233AIvLy9s2rSp0+ADgCVLlkCpVJpeRUX2+TTVaGRxsdw+JmEkxFmIBNwNMuvVO6tUKuTk5CAoKAhAa+JOnjwZbm5u2LJlC8RicZfnEIlEkEqlbV72aHN6CbaeLuW6DEKcipfYQfr5LV68GPv370d+fj6OHDmCGTNmgM/nY86cOabga2pqwjfffIOGhgaUl5ejvLwcBoPBWvVbFcuy0BmMOJxdjdd/O8d1OYQ4nRvjFJy9t1mxW1xcjDlz5qCmpgYKhQJjxozBsWPHoFAosG/fPhw/fhwAEBMT0+b78vLyEBkZabGizfFLajF+TCnC69P6ITFY1umxLMviVFE9/jhThh0Z5ShTNlM3F0KsJNrPE/NHR3H2/k69bq/ByEKrN+CR704itaAOs4aEQsBj8MzEWPhJRGBZFudKG5AYLIVKq8dLv5zFH2fLLPRJCCEdCfV2x4bHRiDU2/LdyLqbIY7ZAa8L6hY9PtmVhR9TWh+exPpLoNUbse7vhVOO5tRgfLwC/7qtLx79/iR0BiO0eiMaNXouyybEJYiFPKx/1DrBZw6nCr8alRZPrk3D2WIlmnVX7jOeLKhrc1xWpQpZlSocyalBmVJj6zIJcWlJwTKE+XA/cMCpJjOVe7ghRO7eJvg6c66UlpwkxNYySpXIsoO1e50q/Pg8BjMGhXBdBiGkExqdEbNWHEG9uoXTOpwq/ADg17RirksghHShQaNHfo2a0xqcLvzuvSEcz90cBz7P9gOlCSHdl3bNvXhbc7rwGxHti2cmxqJvkFfXBxNCOPPxrks4U1zP2fs7XfgBreNwG5qp2woh9qxRo8fsr45iX2YlJ+/vlOHH4zHY8NgIPDImitM1AgghndPojPjwz0ucvLdThh8ABMvd8cod/RAXIOG6FEJIJzJKldB0s3uaJTlt+AGtw9tOFzv+AkqEODOWbV3Lw9acOvz4PAazBlO/P0Ls2U0J/pzcnnLq8AOApdMSEa3w5LoMQkgHnrs5jpP3dfrw83AT4PM5g+Eu5HNdCiGkHZZcv8McTh9+ANAvWIrP5gziugxCSDueXp+Gw9nV0Nt4bWyXCD8AmNTXH55u1PojxN6k5Ndh7n+P48b392HPxQqbrZDoMuHHMAyi6N4fIXarpL4ZD685iRve3oUP/8y0ekvQZcIPAPgcLIxMCDFPTVML/rMnG+9uv2jV93GZ8DMYWWTawRxihJDuqWmy7pRXLhN+OoMRQr7LfFxCHF4LXfZahljIR6Qv3fMjxFHUqLRWPb/LhJ/eYER+dRPXZRBCuqmykcKv1zQ6A/758xk0ammaK0IcRVGtGkq1zmrnd4nw++ivS/j1VAnXZRBCzKAzsHh3h/We+Dp9+JXUN2PNkXyuyyCE9MD6E4XYa6XJTp06/FiWxbvbL6JFb9thM4QQyzlvpSVmnTr8tpwuxdbTpVyXQQjpBZ6VBic4dfj9lk7BR4iju61/oFXO69Thd7mfEFdT5hBCeqdvkBQRVuqf69Sr+8wfHQWdwYisShVWHcjluhxCiJmSQ2RWO7dTt/ymDwrB9EEhaNRYr68QIcR6vD3drHZup275Hc6uxqubM5BLIzsIcUjWXH3RKcOPZVms3J+L93deBAeLQhFCLMDX0w0zBllvATKzLnuXLl0KhmHavBISEkz7V61ahfHjx0MqlYJhGNTX11u63i7pDUb83/pTeG8HBR8hjkwiFoCx4hycZt/zS0xMRFlZmel16NAh0z61Wo1bbrkF//rXvyxaZFeatHr8dLIIRiOLzeml+ONMmU3fnxBieWNj/ax6frMvewUCAQID2+938+yzzwIA9u3b15uazFZS34wXfj6D7RnlOFNcb9P3JoS09frUfpg1JBR7LlTiuY3pCJCKEe7jgYoGDfJr1N0+z73Dwq1YZQ/CLysrC8HBwRCLxRg5ciSWL1+O8PCeF6nVaqHVXpm6pqHB/KEsMQoJ/L1E2HPROmMACSHdEywT46FRkWAYBtMHhWBkH1/4e4nAMAwOZlXhgz8v4XRRfZfnSQyWIsmK3VwAMy97hw8fjjVr1mDHjh1YsWIF8vLyMHbsWDQ29nx6+OXLl0Mmk5leYWFhZp+Dx2MwIEyOpBApInw9IPcQ9rgeQkjPxQd64XxZA1i29YZ7gFRsum83NlaBzf8YhZsS/Ls8z33DrdvqAwCGvVxlD9TX1yMiIgIfffQRFixYYNq+b98+TJgwAXV1dZDL5Z2eo72WX1hYGJRKJaRSabdrqWzUwN9LDADYf6kKD357wrwPQwixCE83Pk6+cjPcO1gqdtWBHLyzreOpqrxEAhz710R4inrWGaWhoQEymazLDOlVJ2e5XI64uDhkZ2f3+BwikQhSqbTNqycuBx8AmsWFEA41tRjwj7Wp2JdZiWvbVizLYteFzm9PzRoS2uPgM0evwk+lUiEnJwdBQUGWqsciJvX1x3/mDEKUH63ZQQgX9mZW4aHVKUgrrGuzvanFgChfT/z0xEhI2gk4H083PDI2yiY1mhV+ixcvxv79+5Gfn48jR45gxowZ4PP5mDNnDgCgvLwc6enpppbg2bNnkZ6ejtraWstX3gmGYTB1QDCC5eKuDyaEWEyQTIwbIn0QFyDBTQn+6BvU9kpOIhLgvbuS4e0hhOqaZSUYBvhq3hCEenvYpFaz2pbFxcWYM2cOampqoFAoMGbMGBw7dgwKhQIAsHLlSixbtsx0/Lhx4wAAq1evxkMPPWS5qrspVO4BoMbm70uIKxoS4Y0Nj43o1hKxW05f3xc3WOaOYZE+1iitXb164GEN3b1Z2ZlGjQ4f/5WFn1KL0KihRYsIsSaxkIfZQ8PwzMTYbk8fl5Jfi6/257S5/zdzUAg+umdgr+vpboY45djeSxUqfHs4j+syCHFqcg8hHhgZiQdHRsDXzDkzh0X6YFikD35LL8F/D+ahtqkFj46LtlKl7XO68NPoDPg5tYjrMghxSncNCcVDoyLRoNFhYJgcHm69i5A7B4bgzoHWm7ygM04XfiIBD8V1zVyXQYhTifD1wEezB2JAqAyCbtzTcwTO8SmuwjAMbu9vX11vCHF0AV5iDInwdprgA5yw5Qe0dpL816azNKUVIT3kJxFhTIwv1C0GKLxEeGpCDNclWZxThh+fYbB6/g1IDJbiX7+exZ/nK7guiRC7dWtSIObcEI5Qb/fWeToBhHq7O1Urrz1OGX48HoMb41r7Hr43KxmpBftR09TCcVWE2B8+j8EbdyZB4eV6Kxw6d7SjdQGU16clcl0GIXYp3Mej3WFmrsDpww8Ahkf5wIqzYRPiMMRCHjyumm3l2UmxHc6+4uxcIvwCpGL8+uQofDl3MCbEK7guhxBO+ElE+PbBYfj3XckAgJmDQzBtQDDHVXHHZdq7g8K94VHeiNSCuq4PJsSJRCs8kVvVhH/eEo9RMa3rYgwMkyNI5m7VBYLsncuE356LFXjyhzRoaa4/4kLkHkLsWDgO2ZWqNmvg2mrmFHvmMuH39YE8Cj7icqYNCIabgId+wT2bJMSZucQ9PwAYF0f3+ohr4THA/SMiuC7DbrlMy+++4eH4/UwpYvwlOJlfh5J6Gv9LnMvDo6NQpdIiKVgKP4kIkX6eiAvw4rosu+Uy4SdzF+KPZ8aavv5ibzbe35nJYUWEWNYjY6MQLHfnugyH4TKXvdeK9Zd0fRAhdsjX0w0+nm5ttrnxeS45SqM3XKbld63JiYFICpEio8T8RdIJ4cLMwSF4+ba+8HAToEVvxHs7L2Ld8UIAwPzRkd2aPp5c4bLhx7IsSmjeP2Knov08EeXnCZmHEFWNWmh0BrxxZ5JpKJq7Gx/vzOiPe4eFIb9GjanJNI2buVw2/Apr1ahT67gug5A2PNz4+GLuYEyI9+/W8cmhciSHyq1blJNy2XZyiNwdMXTfj9iZOweGdDv4SO+4bPgJ+DwsnhzPdRmEmNw5MBiLbo7lugyX4ZKXvcdya1DZqMWFMnrYQWzj8RujEevvhW8P5eF8O//uHh4dhdem9uOgMtflcuFnMLJ45LuT160WT4g17b1YiSW39oXRyOKfv5xps0/mLsQzE51vmnh751KXvUYjiyM51WhqoeAjthUgFQMAxsT6YdbgUIR6X+mM/P3DN0Du4dbRtxIrcZnwO5FXi+HLd2PeNyfA0sJGxMaenRQHAAiWu+PD2QMQrWh92JYcKsOAMDmHlbkulwi/kvpm3P/NcVQ1arkuhbioh9ekYPOpEtPXT4yLBgAsujmOq5JcnkuEX4jcHWHeNOaRcEfZrMOzP6Zj29kyAMDwaF94iQSQil3utrvdcPrwY1kW3x/NR2m9hutSCMGnu7IAtK6aNnNwCGpUtKogV5z+105TiwHvbLsAjY4mMiXc0+oNpj8vuzOJw0qI07f8DEYW7kLXXJ2K2B+aecV+OH34HcqqpjG8xG6cLlbiTHE912UQmBl+S5cuBcMwbV4JCQmm/RqNBk899RR8fX0hkUgwa9YsVFRUWLxoc2SW0ygOYj9a9EbM/PIIjuXWcF2KyzO75ZeYmIiysjLT69ChQ6Z9ixYtwtatW/HTTz9h//79KC0txcyZMy1asNlceGk+Yp/0RhYHLlVxXYbLM/uBh0AgQGBg4HXblUolvvnmG6xbtw433XQTAGD16tXo27cvjh07hhEjRvS+2h64IzkIn+3O4uS9CenIyv05qFPrsOjmWPh7ibkuxyWZ3fLLyspCcHAwoqOjMXfuXBQWts4km5qaCp1Oh0mTJpmOTUhIQHh4OI4ePdrh+bRaLRoaGtq8LClQRv+wiP0xssD6E4UY//4+fLLrEpporLnNmRV+w4cPx5o1a7Bjxw6sWLECeXl5GDt2LBobG1FeXg43NzfI5fI23xMQEIDy8vIOz7l8+XLIZDLTKywsrEcfpCNSsRBTEgMsek5CLEXdYsAnu7Iw6aP9WHe8EJWN1B/VVswKv1tvvRV33303kpOTMWXKFGzbtg319fXYuHFjjwtYsmQJlEql6VVUVNTjc3XkgZGREAud/sE2cWBlSg3+temsqRM0sb5eJYJcLkdcXByys7MRGBiIlpYW1NfXtzmmoqKi3XuEl4lEIkil0jYvSxsZ7Yt1j3Jzz5EQc1ye/YVYX6/CT6VSIScnB0FBQRgyZAiEQiF2795t2p+ZmYnCwkKMHDmy14X2Bo/HYHC4N0ZG+3JaByFd+XR3FpZuOQeDkaYesjazwm/x4sXYv38/8vPzceTIEcyYMQN8Ph9z5syBTCbDggUL8Nxzz2Hv3r1ITU3F/PnzMXLkSM6e9F7rodGRXJdASKcMRhbfHc2H3kjDMa3NrK4uxcXFmDNnDmpqaqBQKDBmzBgcO3YMCoUCAPDxxx+Dx+Nh1qxZ0Gq1mDJlCr788kurFN4TUxIDsfqhYXh72wVkV6q4LoeQdo2J8YNIQEMyrY1hWfua2rOhoQEymQxKpdIq9/8AICW/Fq9sysClykaa2JTYnZ+eGIlhkT5cl+GwupshLvkIdFikD3YuGocVc4fATeCSfwXETr16Rz8MjfDmugyX4PRTWnXmlqRAHPrnBBTVNaOqUYs3fz+PkvpmrssiLmxAqAwMDcm0CZdv9vhLxRgS4Y1bkgIh5NM/OsKdaD9PxPhLuC7DZbh0y+9qOoMR9c009RXhxiNjorDktr7g8+gXsK24fMvvsrqmFtTTvH+EIxKxgILPxij8/qYzsnTZSziz6kAu8qubuC7DpVD4ATiSU417vjoKnYH6vRBuqFsMuPuro/g1rZhGd9iIy4ffmeJ63Pf1cRTX0VNewq2qRi2e23gaX+zN5roUl+Dy4Rcsp/V8iX2hlp9tuHz40SzPxN6k5NeiXk3r+VqbS4ff7gsV+P5oAddlENLGkZwaPPa/VK7LcHouHX6rDuRyXQIh7UovrKfLXytz6fBTtxi4LoGQdrUYjDhN6/talUuHXx3dVyF27P0dmSiqVXNdhtNy2fAzGlmUKWmxGGK/jubW4On1p7guw2m5bPgxDMBnGPh6unFdCiEdoiUtrcdlJzZgGAbrHxuOQWHe+P1sGT7+6xLyaHgRsTPlSg0MRpbG/VqBy7b8AGBIhA94PAbTBgTjr0XjMHtoKNclEdJGo1aPbw7lws4mXHcKLh1+VxPweXhoVBTXZRBynXe2XcT0L48gu7KR61KcCoXfVfoFS/GP8X24LoOQ65wuqsfCDenUArQgCr9rPD85HgNCZVyXQch1zpU2ILWgjusynAaF3zV2X6jA6WIl12UQ0q5lW8/jdFE9mlsM2JHR+qCuWqXluiyH5JJLV3bGYGTx2Pcnsftipc3fmxBz8BjAyAIhcnf8/ORIBMlohiKAlq7sMT6PwZf3D8aEeAXXpRDSqctDf0vqm3HbpwfRqKFlGMxB4dcOkYCPFfcPgYD6VhEHUafW4c9zFVyX4VAo/DogFvKx5La+XJdBSLe9sjkDx3JruC7DYVD4deKeYWEIkIrabPP2EHJUDSGda9YZ8Pj/UlFOY9a7hcKvExKRAGvm39Bm24bHRuL0a5OR8vIkPH5jNK34RuyKslmHxT+dhpHmAuwShV8XGjVtB5ZfqmiEzEMIhZcIS27ti5Ov3AymG/nnJxFhUt8AK1VJyBWHsqux+kg+12XYPZed2KC7hkV649d/jEK9ugUHLlVjRLRvm/0ydyF4DAM+jwELtt3lL/k8BtsXjoWvpxsuljdie0YZ/rOHVugi1vPejou4IzkIAVIx16XYLWr5dYFhGAwO98ZNCQFYOi0RCi/RdccMCffGjfEK/PLkKMQFSNrsGxbpjR8fGwGFlwg8HoN+wVIkh8ptVD1xVS16I77Ym03D4TpBnZwtoFqlhbuQD0+RACzLQm9kYTCyKKxVw43PQ6SfZ5vjWZbF/d8cx+FsejJHrGtwuBxhPh5ICpZhwZgo8Fyg+5ZNOjm/++67YBgGzz77rGlbTk4OZsyYAYVCAalUitmzZ6Oiwrn7H/lJRPAUtd5BYBgGQj4PYiEfcQFe1wXf5WM+uHsAbkrwh1RMdx6I9aQV1uO39FK8ve0Cvj5IC3Zdrcfhl5KSgq+++grJycmmbU1NTZg8eTIYhsGePXtw+PBhtLS0YOrUqTAajRYp2FkEydzx7UPDkPLKJNyaFNhmn6cbn6OqiDN7f2cm9lx07oaIOXrU7FCpVJg7dy6+/vprvPXWW6bthw8fRn5+Pk6dOmVqbn733Xfw9vbGnj17MGnSJMtU7UREAj7emp6EOwcGI9LPE1kVKkxODEBlgxa7LlSgoVkPb08hfj9ThhN5tVyXSxyY3sjiyR/SsO+F8TQOGD1s+T311FO4/fbbrwszrVYLhmEgEl15KCAWi8Hj8XDo0KF2z6XVatHQ0NDm5Wp8JSLckhSEhEAppg4IhkjAR5iPB+aPjsLCSbF4YGQkfnxsBL6aNwSRvh5cl0scmFZvxOmieq7LsAtmh9+GDRuQlpaG5cuXX7dvxIgR8PT0xIsvvgi1Wo2mpiYsXrwYBoMBZWVl7Z5v+fLlkMlkpldYWJj5n8IFMAyDKYmB+HPRjXjtjn7XjTwhpLsultOM0ICZ4VdUVISFCxdi7dq1EIuv7z+kUCjw008/YevWrZBIJJDJZKivr8fgwYPB47X/VkuWLIFSqTS9ioqKevZJXISbgIeHx0Th2JKJOPTiBHx670C4C+keIem+/+zJxm/pJQCAbw/l4ZXNZ9HggjPCmHXPLzU1FZWVlRg8eLBpm8FgwIEDB/D5559Dq9Vi8uTJyMnJQXV1NQQCAeRyOQIDAxEdHd3uOUUiUZvLZNI9DMMg1NsDR3Jq0KwzcF0OcSAGI4uFG9Jx4FI1/jxfjkaNHnsvVmHptETc3M91RiGZFX4TJ07E2bNn22ybP38+EhIS8OKLL4LPv9IC8fPzAwDs2bMHlZWVmDZtmgXKJVfT6g34+K9LXJdBHNQvacWmP5fUN2PnuXIKv454eXkhKSmpzTZPT0/4+vqatq9evRp9+/aFQqHA0aNHsXDhQixatAjx8fGWq5oAAHZklKOMZvAgFrL5VAnmjYjAgDA516XYhMV72GZmZmLJkiWora1FZGQkXn75ZSxatMjSb0MAbD1dynUJxInojSzuWXUUNyX44+4hYZiQ4M91SVZFw9sclFKtw9C3/2p3IgVCestLJMDuxTfC38vxJkagNTyc3B9nyyj4iNU0avX45mAe12VYFYWfgzEaWey9WImP6EEHsbIfjhWgXt3CdRlWQ+HnYL49nIf5a1JorVZidU0tBny6O4vrMqyGphRxEPXqFrzw8xmkFdRxXQpxIelOPBSOws9B5FU34a/zNCMHsa0FY6K4LsFq6LLXAahb9HSPj3CiutF5b69Q+Nk5g5HFU2vTcDCrmutSiAvadaHSaafCp8teO1Zcp8bzG0/jOM3jRzji4+kGpjvLEzogavnZKZZl8crmDAo+wqk66upCbO1QdjX2ZVZxXQZxcXIPN65LsBoKPzt1Mp+6tBDrk7kLIRJ0HAMTnXh8L93zs1PKZtebXJLYjruQj9Xzh2F4lA80OiOO5lZj14VK/JpWDI3OCB4DDI30wW39g7gu1Wqo5WenPEU0OzOxHiPLYlikDxiGgbsbHzclBOCdGf3x0+OjIOAxeGhUFDY+PhJunbQKHR21/OxUXIAX1yUQJ6bVG3E0pwZjYv3abO8fKsPORePQonf+pWYp/OzQxfIGLPn1bNcHEtILQfL2p6vqo5DYuBJuOG+b1oEdzq6BuoXW5SDWkxQidZmQ6wiFnx3aea6c6xKIkxML6J4yhZ+dqWjQ4AR1bCZWJvcQcl0C5yj87MylClpQmljfTQmus0pbRyj87IyILkeIlYmFPNwYr+C6DM5R+NmZQeHyTnvcE9IbXiIBvn94OELk7lyXwjnq6mJn6ppaYDA65xRChFt+EjesmX8DkkJkXJdiFyj87EhBTRPmrDoGPYUfsSCRgIfRMX54fWo/RPh6cl2O3aDwsyP7MqtQqtRwXQZxcF4iAaYPCsGwKB/0C/JCpK8nBHy6lXItCj87UkbBR3ohWCbGkxNiMHNQCDxF9F+7K/Q3ZCeMRhZ7LtICRaRn+ig8seGxkVB4ibguxWFQ+NmJ1UfycalCxXUZxAHNGhyKV+/o69QTj1oDhZ8dyK1S4f2dF7kugzgQhgH+OSUBE/v6I0YhAY/nnOtsWBOFnx14+48L0OicfwohYjn3DgvHk+P7cF2GQ6NHQBzTGYw4WUBT1pPuu3dYGF6f2o/rMhwetfw49tPJYpqynnTb7KGhWD6zv9MuJ2lLFH4cO5hFK7SR7gmRu+Pfdw3gugyn0avL3nfffRcMw+DZZ581bSsvL8e8efMQGBgIT09PDB48GL/88ktv63Ra1Ooj3VXRoEFlI/UFtZQeh19KSgq++uorJCcnt9n+wAMPIDMzE1u2bMHZs2cxc+ZMzJ49G6dOnep1sc5IKqZ51Uj36I0sXtt8DkYa/mgRPQo/lUqFuXPn4uuvv4a3t3ebfUeOHMHTTz+NG264AdHR0XjllVcgl8uRmppqkYKdzZzh4VyXQBzIjnPleOP382BZCsDe6lH4PfXUU7j99tsxadKk6/aNGjUKP/74I2pra2E0GrFhwwZoNBqMHz++3XNptVo0NDS0ebmScbF+GB7lw3UZxIGsOZKPn1OLuS7D4Zkdfhs2bEBaWhqWL1/e7v6NGzdCp9PB19cXIpEIjz/+ODZt2oSYmJh2j1++fDlkMpnpFRYWZm5JDo1hGIzq49f1gYRcZd2JQq5LcHhmhV9RUREWLlyItWvXQixuf9m7V199FfX19di1axdOnjyJ5557DrNnz8bZs+0vxbhkyRIolUrTq6ioyPxP4eDoJjYx15liJTJKlFyX4dAY1oybB5s3b8aMGTPA51+Zat1gMIBhGPB4PGRmZiImJgYZGRlITEw0HTNp0iTExMRg5cqVXb5HQ0MDZDIZlEolpFKpmR/H8ezNrMT81Slcl0EckBufh6/mDcGEBH+uS7Er3c0Qs1p+EydOxNmzZ5Genm56DR06FHPnzkV6ejrUanXrSXltT8vn82E00vCt9hy8VM11CcRBtRiMePT7k8iupEWvesKsTs5eXl5ISkpqs83T0xO+vr5ISkqCTqdDTEwMHn/8cXzwwQfw9fXF5s2b8ddff+H333+3aOHOwGhkcaqIhraRntMbWaw9XojXpyZ2fTBpw6Jje4VCIbZt2waFQoGpU6ciOTkZ33//Pb777jvcdtttlnwrp1BS34xThfVcl0Ec3C+pxWjQUGd5c5l1z88WXOmen0ZnQMKrO7gugziBpyb0wQtTErguwy5Y5Z4fsayPd13iugTiJCb2pUXIzUXhx6FtZ8ts9l6Rvh6YQAtVO6WZg0IwONy76wNJGxR+HGFZFhVKrU3ey8ONj3tvCMfq+Tcg1l+CT+8daJP3JdYnFvLw4q10udsTNKUVRxiGQd9gKU4X1VvtPfg8BusfHYEhEd7g/z3N+bJpiRjZxxdVjVp8sTcbdWq6Ue7IBoV5I0Da/oAD0jlq+XHIXWjdv/5hkd64IcrHFHwAMCrGDwzDYOqAYJo6nyNCPoMAqWVWWXtodKRFzuOKKPw4sv9SFY7l1lrt/AmBXnjjzqQO9/MYBkaWxWPjorHukeGI8PWwWi3kCoWXCGsfGWGx1trOjHJsPV2KdccL8cXebJrtxQx02csRlUZv1fPfPTQMcQFeHe5XeInw6z9GwcfTDUEydzw2Lhovb8poc4xEJIBKa906XVGknweEfB6enRSLerUOOVUq3BinwOliJbaeLjXrXL+eKsGvp0pMX4f5eGDagGBLl+yUKPw4MibWD8MivZGSb50RHqkFtbh3WBg8RQI0aHRIyauFzsBiQoICIkHr2OzEYJnp+FsSA7H1dCmO5dYiQCrCwolxmHNDGJpaDCipa0a1SosmrR5v/XEB1Sot1C0Gq9Tt7KoatfgltQS/PDnqun2ni+rbhJ9EJMArt/fF+Hh/8HhASl4dVh3M7fQ+8aoDORR+3UThxxGZuxDvzOiPmz8+YJXzbztbjqwKFaYPCsHqw3moVrVgcLgcA8JkCJK5X3e8r0SEDY+NhEZngFh4ZeIKiUiA+EAvxKO1FTk5MRB6gxF/nC3D0i3n6IFJDxg7uDQdECbHv25LwLvbL0LhJcJX84ZiYJjctP/25CDkVas6Db/cqiYLV+u8KPw4FBvghVmDQ/FLWs8nphwcLseUxEB4e7hh57ly7L5YadqXVanCplMlWDgpDl8fyMXoGL92g+9qVwdfRwR8Hu4cGIJRffzw8qaz+PN8RY/rd0YiAQ9BMjGadQY0aQ1oatHjct55ewgxa3Boh9/72Lg+mDs8Au5CfrsLkf/fTbEQ8Hl4d3v7i9zH+Ess8hlcAYUfx2YODoG6RY86dUubByBBMjH6BklRo9LiXGkD9Nes2+Au5GPJbQm4e0gY3N1aA+vW/oG484vDpt/+fB6DdY8Mh79UjFh/CZosfP+utXUyBFtOl+K13851uRiTwkuERo3O4Z8yB0rF8BDxr2tljY31wwtT4pEQKIWb4MqzRJZlodEZ0dSiB59h4O3p1un5PUUd/7ds0Rvx34N5He6/f3hENz8FobG9dqBM2YxHvjuJc6WtU/gzDPDtg8NM87Q9vCYFe65q0YX7eOD5yXG4c2DIdediWRaVjVq06I2QeQhttkBSZYMGS34926blebWkECl+fmIUdp4rx8IN6b16r0/vHYjVh/OR/vfln5uAB7CtUzxZW5iPOzb9YzT8JCLoDUYY/37fcyVKhHi7I9Tbuk/Ni2rVGPvvve3uYxgg953bXH5N3+5mCLX87ICnSICbEvwRH+CFgeFyjOrj1+by5duHhnX7XAzDcNLp1V8qxn8fHIpf0kqwbOs5NF7zNPvFWxIgFvIRIneHm4AHHgNodEbwGMDcxcha9EY0/j2LiZdIgG0Lx0LmIcSmtBL8cKwAWZUqS32s60xNDoafpLWPnoDf2rpzE/AwPNrXau95tSCZGLf3D8KOc+UwXPMXF+XnaZManAW1/IjFVTVqsfNcOVLya8GywJAIbzw4KtK0v0mrh5FlUVCjxp/nyvHZnmyzzv/GnYm4c2AIUgtq4e8lRlLIlafWLMviWG4tHvkuBQlBUjwwMgJHc2qwIaX3yyMI+Qw2/WN0m/fjytGcGjzw7XHoDFf++94Yp8B3D9/AYVX2gVp+hDMKLxHuHxGB+0e0f//p8j2tpBAZYvwl+P1MGXKru/+UMtpPApm7EDclXD+TCcMwGNnHFxnLpoBhGOgMRqQV9Kw7UZSfJ96enoTyBg20eiNGRPvaTetqZB9fvDszGS/8fNrUcj5f5lorH/YWhR/hlFjIx7M3x6Fe3YLXfjvXre95f+dFjIkd0+kxl+978RkG/lIxZO7CLh/IXM1dyMeqeUMQ20lHca7NGhIKX4kbPtudhYoGLWYPda2VD3uLwo9w7nKn3KM5NdieUd7l8aeLlWjU6ODVjYc5PB6DpybE4JakQMz88ki3A7BZZ0BGqdKuww8Axsf7Y3y8PzQ6A0QCGq1qDvrbInbjlTv6des4Nz6vTVeS7uijkOCTewa2uy9E7m66nPX3EuG/DwzF70+PwdRkxxkpIRbyXf4pr7ko/Ijd2J9Z1a3jxsVdGaJnDoXX9TOpPDgyAnsW34jFk+PhJuBhxf1DMKlfAJJCZKanucQ50WUvsRviq6b48vF0g0qjv67vnkQkwOIpcT06f78gKb55cChUWj0MRhZhPh4YFukDABgfr8DRl26Cr8QyU00R+0fhR+zG8GhfPH1TDPoGSXFrUiA+/PMSPt97pRtMYrAUGx4b0a17fe3h8ZgO17rwFAk6HVlBnA/9tIndCJG74/nJ8aavr+268fRNMT0OPkKuRTc1iN1Kybsy1vmmBH9MSQzksBribKjlR+zSH2fK0NSiB8MAC0ZHYfGUeHqaSSyKwo/YpWadAV8/MBR9g6QIlnc+DRchPUHhR+zSXUM6nvOOEEuge36EEJdE4UcIcUkUfoQQl0ThRwhxSRR+hBCXROFHCHFJvQq/d999FwzD4NlnnwUA5Ofng2GYdl8//fSTJeolhBCL6HH4paSk4KuvvkJycrJpW1hYGMrKytq8li1bBolEgltvvdUiBRNCiCX0KPxUKhXmzp2Lr7/+Gt7e3qbtfD4fgYGBbV6bNm3C7NmzIZHQYsqEEPvRo/B76qmncPvtt2PSpEmdHpeamor09HQsWLCgw2O0Wi0aGhravAghxNrMHt62YcMGpKWlISUlpctjv/nmG/Tt2xejRo3q8Jjly5dj2bJl5pZBCCG9YlbLr6ioCAsXLsTatWshFne+MHZzczPWrVvXaasPAJYsWQKlUml6FRX1fn1VQgjpilktv9TUVFRWVmLw4MGmbQaDAQcOHMDnn38OrVYLPr91bYWff/4ZarUaDzzwQKfnFIlEEIlo6nBCiG2ZFX4TJ07E2bNn22ybP38+EhIS8OKLL5qCD2i95J02bRoUCoVlKiWEEAsyK/y8vLyQlJTUZpunpyd8fX3bbM/OzsaBAwewbds2swti2dbl5+nBByGkJy5nx+Us6YhV5vP79ttvERoaismTJ5v9vY2NjQBa+wwSQkhPNTY2QiaTdbifYbuKRxszGo0oLS2Fl5dXj6ctb2hoQFhYGIqKiiCVSi1cIXfoczkW+lzcYFkWjY2NCA4OBo/X8TNdu5vJmcfjITTUMrP4SqVSu/zh9BZ9LsdCn8v2OmvxXUYTGxBCXBKFHyHEJTll+IlEIrz++utO13+QPpdjoc9l3+zugQchhNiCU7b8CCGkKxR+hBCXROFHCHFJFH6EEJfkVOFXUlKC+++/H76+vnB3d0f//v1x8uRJrsvqFYPBgFdffRVRUVFwd3dHnz598Oabb3Y5btEeHThwAFOnTkVwcDAYhsHmzZvb7GdZFq+99hqCgoLg7u6OSZMmISsri5tizdDZ59LpdHjxxRfRv39/eHp6Ijg4GA888ABKS0u5K7ibuvp5Xe2JJ54AwzD45JNPbFZfbzlN+NXV1WH06NEQCoXYvn07zp8/jw8//LDNNPuO6L333sOKFSvw+eef48KFC3jvvffw73//G//5z3+4Ls1sTU1NGDBgAL744ot29//73//GZ599hpUrV+L48ePw9PTElClToNFobFypeTr7XGq1GmlpaXj11VeRlpaGX3/9FZmZmZg2bRoHlZqnq5/XZZs2bcKxY8cQHBxso8oshHUSL774IjtmzBiuy7C422+/nX344YfbbJs5cyY7d+5cjiqyDADspk2bTF8bjUY2MDCQff/9903b6uvrWZFIxK5fv56DCnvm2s/VnhMnTrAA2IKCAtsUZQEdfa7i4mI2JCSEzcjIYCMiItiPP/7Y5rX1lNO0/LZs2YKhQ4fi7rvvhr+/PwYNGoSvv/6a67J6bdSoUdi9ezcuXboEADh9+jQOHTrkdKvh5eXloby8vM26MDKZDMOHD8fRo0c5rMzylEolGIaBXC7nupReMRqNmDdvHl544QUkJiZyXY7Z7G5ig57Kzc3FihUr8Nxzz+Ff//oXUlJS8Mwzz8DNzQ0PPvgg1+X12EsvvYSGhgYkJCSAz+fDYDDg7bffxty5c7kuzaLKy8sBAAEBAW22BwQEmPY5A41GgxdffBFz5syx20kBuuu9996DQCDAM888w3UpPeI04Wc0GjF06FC88847AIBBgwYhIyMDK1eudOjw27hxI9auXYt169YhMTER6enpePbZZxEcHOzQn8sV6XQ6zJ49GyzLYsWKFVyX0yupqan49NNPkZaW1uOp57jmNJe9QUFB6NevX5ttffv2RWFhIUcVWcYLL7yAl156Cffeey/69++PefPmYdGiRVi+fDnXpVlUYGAgAKCioqLN9oqKCtM+R3Y5+AoKCvDXX385fKvv4MGDqKysRHh4OAQCAQQCAQoKCvD8888jMjKS6/K6xWnCb/To0cjMzGyz7dKlS4iIiOCoIstQq9XXTcjI5/NhNBo5qsg6oqKiEBgYiN27d5u2NTQ04Pjx4xg5ciSHlfXe5eDLysrCrl274Ovry3VJvTZv3jycOXMG6enppldwcDBeeOEF7Ny5k+vyusVpLnsXLVqEUaNG4Z133sHs2bNx4sQJrFq1CqtWreK6tF6ZOnUq3n77bYSHhyMxMRGnTp3CRx99hIcffpjr0symUqmQnZ1t+jovLw/p6enw8fFBeHg4nn32Wbz11luIjY1FVFQUXn31VQQHB2P69OncFd0NnX2uoKAg3HXXXUhLS8Pvv/8Og8Fguofp4+MDNzc3rsruUlc/r2tDXCgUIjAwEPHx8bYutWe4ftxsSVu3bmWTkpJYkUjEJiQksKtWreK6pF5raGhgFy5cyIaHh7NisZiNjo5mX375ZVar1XJdmtn27t3LArju9eCDD7Is29rd5dVXX2UDAgJYkUjETpw4kc3MzOS26G7o7HPl5eW1uw8Au3fvXq5L71RXP69rOVpXF5rSihDikpzmnh8hhJiDwo8Q4pIo/AghLonCjxDikij8CCEuicKPEOKSKPwIIS6Jwo8Q4pIo/AghLonCjxDikij8CCEuicKPEOKS/h+EDIxq5QbgMAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "area_2x_workflow = ge.register_workflow(\n", + " ge.workflow_builder.operators.VectorExpression(\n", + " area_workflow.workflow_definition().operator,\n", + " expression=\"2 * area\",\n", + " input_columns=[\"area\"],\n", + " output_column='area2x',\n", + " )\n", + ")\n", + "\n", + "area_2x_data = area_2x_workflow.get_dataframe(\n", + " ge.QueryRectangle(\n", + " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", + " ge.TimeInterval(np.datetime64('2014-04-01')),\n", + " ge.SpatialResolution(0.1, 0.1)\n", + " )\n", + ")\n", + "\n", + "area_2x_data.plot()\n", + "\n", + "area_2x_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compute the centroid of each polygon and plot it along the original polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometrystartend
0POINT (10.38149 51.10636)NaTNaT
\n", + "
" + ], + "text/plain": [ + " geometry start end\n", + "0 POINT (10.38149 51.10636) NaT NaT" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "centroid_workflow = ge.register_workflow(\n", + " ge.workflow_builder.operators.VectorExpression(\n", + " source_workflow.workflow_definition().operator,\n", + " expression=\"centroid(geom)\",\n", + " input_columns=[],\n", + " output_column=ge.workflow_builder.operators.GeoVectorDataType.MULTI_POINT,\n", + " )\n", + ")\n", + "\n", + "centroid_data = centroid_workflow.get_dataframe(\n", + " ge.QueryRectangle(\n", + " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", + " ge.TimeInterval(np.datetime64('2014-04-01')),\n", + " ge.SpatialResolution(0.1, 0.1)\n", + " )\n", + ")\n", + "\n", + "source_data.plot()\n", + "centroid_data.plot(ax=plt.gca(), color='red')\n", + "\n", + "centroid_data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/geoengine/workflow_builder/operators.py b/geoengine/workflow_builder/operators.py index 03a627f6..4c703676 100644 --- a/geoengine/workflow_builder/operators.py +++ b/geoengine/workflow_builder/operators.py @@ -2,6 +2,7 @@ from __future__ import annotations from abc import abstractmethod +from enum import Enum from typing import Any, Dict, List, Optional, Tuple, Union, cast, Literal from geoengine.datasets import DatasetName @@ -101,6 +102,8 @@ def from_operator_dict(cls, operator_dict: Dict[str, Any]) -> VectorOperator: return PointInPolygonFilter.from_operator_dict(operator_dict) if operator_dict['type'] == 'TimeShift': return TimeShift.from_operator_dict(operator_dict).as_vector() + if operator_dict['type'] == 'VectorExpression': + return VectorExpression.from_operator_dict(operator_dict) raise NotImplementedError(f"Unknown operator type {operator_dict['type']}") @@ -618,6 +621,102 @@ def from_operator_dict(cls, operator_dict: Dict[str, Any]) -> 'Expression': ) +class GeoVectorDataType(Enum): + '''The output type of geometry vector data.''' + MULTI_POINT = "MultiPoint" + MULTI_LINE_STRING = "MultiLineString" + MULTI_POLYGON = "MultiPolygon" + + +class VectorExpression(VectorOperator): + '''The `VectorExpression` operator.''' + + source: VectorOperator + + expression: str + input_columns: List[str] + output_column: str | GeoVectorDataType + geometry_column_name = None + output_measurement: Optional[Measurement] = None + + # pylint: disable=too-many-arguments + def __init__(self, + source: VectorOperator, + *, + expression: str, + input_columns: List[str], + output_column: str | GeoVectorDataType, + geometry_column_name: Optional[str] = None, + output_measurement: Optional[Measurement] = None, + ): + '''Creates a new VectorExpression operator.''' + self.source = source + + self.expression = expression + self.input_columns = input_columns + self.output_column = output_column + + self.geometry_column_name = geometry_column_name + self.output_measurement = output_measurement + + def name(self) -> str: + return 'VectorExpression' + + def to_dict(self) -> Dict[str, Any]: + if isinstance(self.output_column, GeoVectorDataType): + output_column_dict = { + "type": "geometry", + "value": self.output_column.value, + } + elif isinstance(self.output_column, str): + output_column_dict = { + "type": "column", + "value": self.output_column, + } + + params = { + "expression": self.expression, + "inputColumns": self.input_columns, + "outputColumn": output_column_dict, + } + + if self.geometry_column_name: + params["geometryColumnName"] = self.geometry_column_name + + if self.output_measurement: + params["outputMeasurement"] = self.output_measurement.to_api_dict().to_dict() + + return { + "type": self.name(), + "params": params, + "sources": { + "vector": self.source.to_dict() + } + } + + @classmethod + def from_operator_dict(cls, operator_dict: Dict[str, Any]) -> VectorExpression: + if operator_dict["type"] != "Expression": + raise ValueError("Invalid operator type") + + geometry_column_name = None + if "geometryColumnName" in operator_dict["params"]: + geometry_column_name = operator_dict["params"]["geometryColumnName"] + + output_measurement = None + if "outputMeasurement" in operator_dict["params"]: + output_measurement = Measurement.from_response(operator_dict["params"]["outputMeasurement"]) + + return VectorExpression( + source=VectorOperator.from_operator_dict(operator_dict["sources"]["vector"]), + expression=operator_dict["params"]["expression"], + input_columns=operator_dict["params"]["inputColumns"], + output_column=operator_dict["params"]["outputColumn"], + geometry_column_name=geometry_column_name, + output_measurement=output_measurement, + ) + + class TemporalRasterAggregation(RasterOperator): '''A TemporalRasterAggregation operator.''' From 75ee60cbec5dfcf3c12aa78bd239b1645410eea0 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Fri, 2 Feb 2024 13:28:30 +0100 Subject: [PATCH 2/2] re-use qrect --- examples/expression.ipynb | 42 +++++++++++---------------------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/examples/expression.ipynb b/examples/expression.ipynb index 274794e8..10cfac0d 100644 --- a/examples/expression.ipynb +++ b/examples/expression.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -81,7 +81,7 @@ "0 MULTIPOLYGON (((13.81572 48.76643, 13.78586 48... NaT NaT" ] }, - "execution_count": 15, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, @@ -121,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -168,7 +168,7 @@ "0 MULTIPOLYGON (((13.81572 48.76643, 13.78586 48... 45.930027 NaT NaT" ] }, - "execution_count": 20, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, @@ -193,13 +193,7 @@ " )\n", ")\n", "\n", - "area_data = area_workflow.get_dataframe(\n", - " ge.QueryRectangle(\n", - " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", - " ge.TimeInterval(np.datetime64('2014-04-01')),\n", - " ge.SpatialResolution(0.1, 0.1)\n", - " )\n", - ")\n", + "area_data = area_workflow.get_dataframe(query_rectangle)\n", "\n", "area_data.plot()\n", "\n", @@ -215,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -267,7 +261,7 @@ "0 NaT NaT " ] }, - "execution_count": 25, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, @@ -292,13 +286,7 @@ " )\n", ")\n", "\n", - "area_2x_data = area_2x_workflow.get_dataframe(\n", - " ge.QueryRectangle(\n", - " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", - " ge.TimeInterval(np.datetime64('2014-04-01')),\n", - " ge.SpatialResolution(0.1, 0.1)\n", - " )\n", - ")\n", + "area_2x_data = area_2x_workflow.get_dataframe(query_rectangle)\n", "\n", "area_2x_data.plot()\n", "\n", @@ -314,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -359,7 +347,7 @@ "0 POINT (10.38149 51.10636) NaT NaT" ] }, - "execution_count": 24, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, @@ -384,13 +372,7 @@ " )\n", ")\n", "\n", - "centroid_data = centroid_workflow.get_dataframe(\n", - " ge.QueryRectangle(\n", - " ge.BoundingBox2D(-111.533203125, -4.482421875, 114.345703125, 73.388671875),\n", - " ge.TimeInterval(np.datetime64('2014-04-01')),\n", - " ge.SpatialResolution(0.1, 0.1)\n", - " )\n", - ")\n", + "centroid_data = centroid_workflow.get_dataframe(query_rectangle)\n", "\n", "source_data.plot()\n", "centroid_data.plot(ax=plt.gca(), color='red')\n",