{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Importing coast files\n", "\n", "Coastline files need to be in a format from which we can construct a MultiPolygon object. This would be the most efficient way to perform intersections with the grid. If they're already in some sort of a GIS format then that would be ideal. Some of the ASCII files we have within our team contain some polygons that are \"not simple\" and hence there is some code in this package that tries to rectify this" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from cem_gridtools.cem_gridtools import Coast\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "setas.cst contains 603 polygons\n" ] } ], "source": [ "# File resides in 'docs/source/examples'\n", "fname = 'setas.cst'\n", "# Initialise object\n", "C = Coast(fname)\n", "print(\"{} contains {} polygons\".format(fname,C.get_num_polygons()))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Polygon using indices (2279:2283) is invalid:Too few points in geometry component[145.299916 -42.180851]\n", "Polygon using indices (16483:16487) is invalid:Too few points in geometry component[146.348145 -43.58688]\n", "Polygon using indices (18964:18986) is invalid:Self-intersection[147.976090376623 -42.8566280649351]\n", "Polygon using indices (18987:18991) is invalid:Self-intersection[148.045237 -42.653316]\n", "Polygon using indices (76783:77384) is invalid:Self-intersection[146.347855 -43.58678]\n", "Polygon using indices (77385:222908) is invalid:Self-intersection[145.543558333333 -42.3834755555556]\n", "Polygon using indices (222909:223059) is invalid:Self-intersection[145.984111481604 -43.01193]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "C.plot()\n", "# Note: The erroneous Polygons try to use buffer(0) to rectify the issue" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "shapely.geometry.polygon.Polygon" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Each feature is a polygon\n", "# eg.\n", "polyFunc = C.get_polyons_as_generator()\n", "p = next(polyFunc)\n", "type(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jupyter notebook can render this natively" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }